Token Activelink
Overview ERC-1155
Total Supply:
0 ACTV
Holders:
49 addresses
Transfers:
-
Profile Summary
Contract:
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
XrDynamicsNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-04 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/[email protected]/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ 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.0; library Strings { function concat(string memory _base, string memory _value) internal pure returns (string memory) { bytes memory _baseBytes = bytes(_base); bytes memory _valueBytes = bytes(_value); string memory _tmpValue = new string(_baseBytes.length + _valueBytes.length); bytes memory _newValue = bytes(_tmpValue); uint i; uint j; for(i=0; i<_baseBytes.length; i++) { _newValue[j++] = _baseBytes[i]; } for(i=0; i<_valueBytes.length; i++) { _newValue[j++] = _valueBytes[i]; } return string(_newValue); } 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); } } // File: @openzeppelin/[email protected]/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/[email protected]/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ 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); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ 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); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/[email protected]/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/[email protected]/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/[email protected]/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/[email protected]/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/[email protected]/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/[email protected]/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } } pragma solidity ^0.8.0; /// @title IERC2981Royalties /// @dev Interface for the ERC2981 - Token Royalty standard interface IERC2981Royalties { /// @notice Called with the sale price to determine how much royalty // is owed and to whom. /// @param _tokenId - the NFT asset queried for royalty information /// @param _value - the sale price of the NFT asset specified by _tokenId /// @return _receiver - address of who should be sent the royalty payment /// @return _royaltyAmount - the royalty payment amount for value sale price function royaltyInfo(uint256 _tokenId, uint256 _value) external view returns (address _receiver, uint256 _royaltyAmount); function xrRoyaltyInfo(uint256 _tokenId, uint256 _value) external view returns (address _receiver, uint256 _royaltyAmount); } pragma solidity ^0.8.0; /// @dev This is a contract used to add ERC2981 support to ERC721 and 1155 abstract contract ERC2981Base is ERC165, IERC2981Royalties { struct RoyaltyInfo { address recipient; uint24 amount; } struct XrRoyaltyInfo { address recipient; uint24 amount; } /// @inheritdoc ERC165 function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC2981Royalties).interfaceId || super.supportsInterface(interfaceId); } } // File: contract-d19dcc7f33.sol pragma solidity ^0.8.2; // XrDynamics NFT lanchpad smartcontract contract XrDynamicsNFT is ERC1155, Ownable, Pausable, ERC1155Burnable, ERC2981Base { // Contract name string public name; // Contract symbol string public symbol; // mapping token uri mapping (uint256 => string) private _uris; // address array for whitelist address[] private whitelist; // address array for tokens addresses address[] public tokenAddresses; // MarketPlace address address public marketPlaceAddress; // token ids uint256 public tokenIDs = 0; // mapping royalties mapping(uint256 => RoyaltyInfo) internal _royalties; // mapping xrRoyalties mapping(uint256 => XrRoyaltyInfo) internal _xrRoyalties; // event for whitelisting event Whitelisted(address indexed _address); event RemovedFromWhitelist(address indexed account); // event for Payment Token address event PaymentToken(address indexed _address); // event for URIs event URIs(uint256 tokenId, string uri); using Strings for string; constructor( string memory _name, string memory _symbol ) ERC1155("") { name = _name; symbol = _symbol; } function _setTokenUri(uint256 tokenId, string memory uri) private { require(bytes(_uris[tokenId]).length == 0, "Cannot set the uri twice for a token"); _uris[tokenId] = uri; emit URIs(tokenId, uri); } // get uri function getUri(uint256 tokenId) public view returns (string memory uri){ uri = _uris[tokenId]; } // mint the single items function mint(uint256 amount, uint256 royalty, uint256 xrRoyalty, string memory uri) public whenNotPaused { require(isWhitelisted(msg.sender), "You are not eligible to Mint item"); tokenIDs = tokenIDs + 1; _setTokenUri(tokenIDs, uri); _setTokenRoyalty(tokenIDs, msg.sender, royalty); _setTokenXrRoyalty(tokenIDs, msg.sender, xrRoyalty); _mint(msg.sender, tokenIDs, amount, "0x00"); } // mint batch items function mintBatch(uint256[] memory amounts, uint256 royalty, uint256 xrRoyalty, string[] memory uri) public whenNotPaused { require(isWhitelisted(msg.sender), "You are not eligible to Mint items"); require(amounts.length <= 10, "You are allow to mint max 10 items at a time"); uint256[] memory ids = new uint256[](amounts.length); string memory strTokenIDs = ""; for (uint256 i = 0; i < amounts.length; i++) { tokenIDs = tokenIDs + 1; ids[i] = tokenIDs; strTokenIDs=Strings.toString(tokenIDs); _setTokenUri(tokenIDs, uri[i]); _setTokenRoyalty(tokenIDs, msg.sender, royalty); _setTokenXrRoyalty(tokenIDs, msg.sender, xrRoyalty); } _mintBatch(msg.sender, ids, amounts, "0x00"); } //add the token address function addTokenAddress(address _address) public onlyOwner { require(_address != address(0), "Invalid address"); tokenAddresses.push(_address); emit PaymentToken(_address); } // check the token address in the list function paymentTokens(address _address) public view returns(bool) { uint i; uint length = tokenAddresses.length; for (i = 0; i < length; i++) { address _addressArr = tokenAddresses[i]; if (_addressArr == _address) { return true; } } return false; } // delete the token address from the list function deleteTokenAddress(address _address) public onlyOwner returns(bool) { uint i; uint length = tokenAddresses.length; for (i = 0; i < length; i++) { address _addressArr = tokenAddresses[i]; if (_addressArr == _address) { delete tokenAddresses[i]; return true; } } return false; } //add the address in Whitelist function addWhitelist(address _address) public onlyOwner { require(_address != address(0), "Invalid address"); whitelist.push(_address); emit Whitelisted(_address); } //remove the address in Whitelist function removeWhitelist(address _address) public onlyOwner returns(bool) { uint i; uint length = whitelist.length; for (i = 0; i < length; i++) { address _addressArr = whitelist[i]; if (_addressArr == _address) { delete whitelist[i]; emit RemovedFromWhitelist(_address); return true; } } return false; } // check the address in whitelist function isWhitelisted(address _address) public view returns(bool) { uint i; uint length = whitelist.length; for (i = 0; i < length; i++) { address _addressArr = whitelist[i]; if (_addressArr == _address) { return true; } } return false; } // Owner can pause the minting function pause() public onlyOwner { _pause(); } // Owner can pause/unpause the minting function unpause() public onlyOwner { _unpause(); } /// @dev Sets token royalties /// @param tokenId the token id fir which we register the royalties /// @param recipient recipient of the royalties /// @param value percentage (using 2 decimals - 10000 = 100, 0 = 0) function _setTokenRoyalty( uint256 tokenId, address recipient, uint256 value ) internal { require(value <= 10000, 'ERC2981Royalties: Too high'); _royalties[tokenId] = RoyaltyInfo(recipient, uint24(value)); } function _setTokenXrRoyalty( uint256 tokenId, address recipient, uint256 value ) internal { require(value <= 10000, 'ERC2981Royalties: Too high'); _xrRoyalties[tokenId] = XrRoyaltyInfo(recipient, uint24(value)); } /// @inheritdoc IERC2981Royalties function royaltyInfo(uint256 tokenId, uint256 value) external view override returns (address receiver, uint256 royaltyAmount) { RoyaltyInfo memory royalties = _royalties[tokenId]; receiver = royalties.recipient; royaltyAmount = (value * royalties.amount) / 100; } function xrRoyaltyInfo(uint256 tokenId, uint256 value) external view override returns (address receiver, uint256 royaltyAmount) { XrRoyaltyInfo memory xrRoyalties = _xrRoyalties[tokenId]; receiver = xrRoyalties.recipient; royaltyAmount = (value * xrRoyalties.amount) / 100; } function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory tData) internal whenNotPaused override { super._beforeTokenTransfer(operator, from, to, ids, amounts, tData); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155, ERC2981Base) returns (bool) { return super.supportsInterface(interfaceId); } }
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"}],"name":"PaymentToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RemovedFromWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"URIs","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"}],"name":"Whitelisted","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"deleteTokenAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getUri","outputs":[{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketPlaceAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"royalty","type":"uint256"},{"internalType":"uint256","name":"xrRoyalty","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"royalty","type":"uint256"},{"internalType":"uint256","name":"xrRoyalty","type":"uint256"},{"internalType":"string[]","name":"uri","type":"string[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"paymentTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"","type":"uint256"}],"name":"tokenAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIDs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"xrRoyaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600a553480156200001657600080fd5b5060405162005e8738038062005e8783398181016040528101906200003c9190620002eb565b604051806020016040528060008152506200005d81620000d360201b60201c565b506200007e62000072620000ef60201b60201c565b620000f760201b60201c565b6000600360146101000a81548160ff0219169083151502179055508160049080519060200190620000b1929190620001bd565b508060059080519060200190620000ca929190620001bd565b505050620004f4565b8060029080519060200190620000eb929190620001bd565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001cb9062000405565b90600052602060002090601f016020900481019282620001ef57600085556200023b565b82601f106200020a57805160ff19168380011785556200023b565b828001600101855582156200023b579182015b828111156200023a5782518255916020019190600101906200021d565b5b5090506200024a91906200024e565b5090565b5b80821115620002695760008160009055506001016200024f565b5090565b6000620002846200027e8462000399565b62000370565b905082815260208101848484011115620002a357620002a2620004d4565b5b620002b0848285620003cf565b509392505050565b600082601f830112620002d057620002cf620004cf565b5b8151620002e28482602086016200026d565b91505092915050565b60008060408385031215620003055762000304620004de565b5b600083015167ffffffffffffffff811115620003265762000325620004d9565b5b6200033485828601620002b8565b925050602083015167ffffffffffffffff811115620003585762000357620004d9565b5b6200036685828601620002b8565b9150509250929050565b60006200037c6200038f565b90506200038a82826200043b565b919050565b6000604051905090565b600067ffffffffffffffff821115620003b757620003b6620004a0565b5b620003c282620004e3565b9050602081019050919050565b60005b83811015620003ef578082015181840152602081019050620003d2565b83811115620003ff576000848401525b50505050565b600060028204905060018216806200041e57607f821691505b6020821081141562000435576200043462000471565b5b50919050565b6200044682620004e3565b810181811067ffffffffffffffff82111715620004685762000467620004a0565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61598380620005046000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c80638456cb591161010f578063dce1fb35116100a2578063f242432a11610071578063f242432a146105e0578063f2fde38b146105fc578063f5298aca14610618578063f80f5dd514610634576101ef565b8063dce1fb3514610531578063e5df8b8414610562578063e985e9c514610592578063ed27107b146105c2576101ef565b8063a22cb465116100de578063a22cb46514610497578063aeffe134146104b3578063c3b88b42146104d1578063da0544aa14610501576101ef565b80638456cb59146104215780638da5cb5b1461042b57806395d89b4114610449578063967506be14610467576101ef565b80634e1273f4116101875780635c975abb116101565780635c975abb146103ad5780636b20c454146103cb578063715018a6146103e757806378c8cda7146103f1576101ef565b80634e1273f41461032957806351992fcb14610359578063541993f41461037557806357e7aba714610391576101ef565b80632a55205a116101c35780632a55205a146102a25780632eb2c2d6146102d35780633af32abf146102ef5780633f4ba83a1461031f576101ef565b8062fdd58e146101f457806301ffc9a71461022457806306fdde03146102545780630e89341c14610272575b600080fd5b61020e6004803603810190610209919061406b565b610650565b60405161021b9190614c24565b60405180910390f35b61023e60048036038101906102399190614215565b610719565b60405161024b9190614907565b60405180910390f35b61025c61072b565b6040516102699190614922565b60405180910390f35b61028c6004803603810190610287919061426f565b6107b9565b6040516102999190614922565b60405180910390f35b6102bc60048036038101906102b7919061429c565b61084d565b6040516102ca929190614885565b60405180910390f35b6102ed60048036038101906102e89190613e3a565b61091d565b005b61030960048036038101906103049190613dcd565b6109be565b6040516103169190614907565b60405180910390f35b610327610a7b565b005b610343600480360381019061033e91906140fe565b610b01565b60405161035091906148ae565b60405180910390f35b610373600480360381019061036e9190613dcd565b610c1a565b005b61038f600480360381019061038a9190614176565b610daf565b005b6103ab60048036038101906103a691906142dc565b610fd3565b005b6103b56110e7565b6040516103c29190614907565b60405180910390f35b6103e560048036038101906103e09190613fa0565b6110fe565b005b6103ef61119b565b005b61040b60048036038101906104069190613dcd565b611223565b6040516104189190614907565b60405180910390f35b6104296113e0565b005b610433611466565b60405161044091906147a8565b60405180910390f35b610451611490565b60405161045e9190614922565b60405180910390f35b610481600480360381019061047c9190613dcd565b61151e565b60405161048e9190614907565b60405180910390f35b6104b160048036038101906104ac919061402b565b611698565b005b6104bb6116ae565b6040516104c89190614c24565b60405180910390f35b6104eb60048036038101906104e69190613dcd565b6116b4565b6040516104f89190614907565b60405180910390f35b61051b6004803603810190610516919061426f565b611771565b6040516105289190614922565b60405180910390f35b61054b6004803603810190610546919061429c565b611816565b604051610559929190614885565b60405180910390f35b61057c6004803603810190610577919061426f565b6118e6565b60405161058991906147a8565b60405180910390f35b6105ac60048036038101906105a79190613dfa565b611925565b6040516105b99190614907565b60405180910390f35b6105ca6119b9565b6040516105d791906147a8565b60405180910390f35b6105fa60048036038101906105f59190613f09565b6119df565b005b61061660048036038101906106119190613dcd565b611a80565b005b610632600480360381019061062d91906140ab565b611b78565b005b61064e60048036038101906106499190613dcd565b611c15565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b8906149e4565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061072482611daa565b9050919050565b6004805461073890614fdf565b80601f016020809104026020016040519081016040528092919081815260200182805461076490614fdf565b80156107b15780601f10610786576101008083540402835291602001916107b1565b820191906000526020600020905b81548152906001019060200180831161079457829003601f168201915b505050505081565b6060600280546107c890614fdf565b80601f01602080910402602001604051908101604052809291908181526020018280546107f490614fdf565b80156108415780601f1061081657610100808354040283529160200191610841565b820191906000526020600020905b81548152906001019060200180831161082457829003601f168201915b50505050509050919050565b6000806000600b60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900462ffffff1662ffffff1662ffffff16815250509050806000015192506064816020015162ffffff16856109099190614e9b565b6109139190614e6a565b9150509250929050565b610925611e24565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061096b575061096a85610965611e24565b611925565b5b6109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a190614ae4565b60405180910390fd5b6109b78585858585611e2c565b5050505050565b60008060006007805490509050600091505b80821015610a6f576000600783815481106109ee576109ed615149565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a5b5760019350505050610a76565b508180610a6790615042565b9250506109d0565b6000925050505b919050565b610a83611e24565b73ffffffffffffffffffffffffffffffffffffffff16610aa1611466565b73ffffffffffffffffffffffffffffffffffffffff1614610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee90614b44565b60405180910390fd5b610aff612140565b565b60608151835114610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e90614ba4565b60405180910390fd5b6000835167ffffffffffffffff811115610b6457610b63615178565b5b604051908082528060200260200182016040528015610b925781602001602082028036833780820191505090505b50905060005b8451811015610c0f57610bdf858281518110610bb757610bb6615149565b5b6020026020010151858381518110610bd257610bd1615149565b5b6020026020010151610650565b828281518110610bf257610bf1615149565b5b60200260200101818152505080610c0890615042565b9050610b98565b508091505092915050565b610c22611e24565b73ffffffffffffffffffffffffffffffffffffffff16610c40611466565b73ffffffffffffffffffffffffffffffffffffffff1614610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90614b44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd906149a4565b60405180910390fd5b6008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f800676e3a5beb1e5ab35751a52bb83649a5f318a7c1a11dcba5f29640b468d8460405160405180910390a250565b610db76110e7565b15610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90614aa4565b60405180910390fd5b610e00336109be565b610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3690614c04565b60405180910390fd5b600a84511115610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b90614a64565b60405180910390fd5b6000845167ffffffffffffffff811115610ea157610ea0615178565b5b604051908082528060200260200182016040528015610ecf5781602001602082028036833780820191505090505b509050600060405180602001604052806000815250905060005b8651811015610f89576001600a54610f019190614e14565b600a81905550600a54838281518110610f1d57610f1c615149565b5b602002602001018181525050610f34600a546121e2565b9150610f5c600a54858381518110610f4f57610f4e615149565b5b6020026020010151612343565b610f69600a54338861240a565b610f76600a543387612506565b8080610f8190615042565b915050610ee9565b50610fcb3383886040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250612602565b505050505050565b610fdb6110e7565b1561101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290614aa4565b60405180910390fd5b611024336109be565b611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a90614a44565b60405180910390fd5b6001600a546110729190614e14565b600a81905550611084600a5482612343565b611091600a54338561240a565b61109e600a543384612506565b6110e133600a54866040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250612820565b50505050565b6000600360149054906101000a900460ff16905090565b611106611e24565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061114c575061114b83611146611e24565b611925565b5b61118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290614a84565b60405180910390fd5b6111968383836129b6565b505050565b6111a3611e24565b73ffffffffffffffffffffffffffffffffffffffff166111c1611466565b73ffffffffffffffffffffffffffffffffffffffff1614611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e90614b44565b60405180910390fd5b6112216000612c67565b565b600061122d611e24565b73ffffffffffffffffffffffffffffffffffffffff1661124b611466565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129890614b44565b60405180910390fd5b6000806007805490509050600091505b808210156113d4576000600783815481106112cf576112ce615149565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113c0576007838154811061134457611343615149565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558473ffffffffffffffffffffffffffffffffffffffff167fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df75760405160405180910390a2600193505050506113db565b5081806113cc90615042565b9250506112b1565b6000925050505b919050565b6113e8611e24565b73ffffffffffffffffffffffffffffffffffffffff16611406611466565b73ffffffffffffffffffffffffffffffffffffffff161461145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390614b44565b60405180910390fd5b611464612d2d565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6005805461149d90614fdf565b80601f01602080910402602001604051908101604052809291908181526020018280546114c990614fdf565b80156115165780601f106114eb57610100808354040283529160200191611516565b820191906000526020600020905b8154815290600101906020018083116114f957829003601f168201915b505050505081565b6000611528611e24565b73ffffffffffffffffffffffffffffffffffffffff16611546611466565b73ffffffffffffffffffffffffffffffffffffffff161461159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390614b44565b60405180910390fd5b6000806008805490509050600091505b8082101561168c576000600883815481106115ca576115c9615149565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611678576008838154811061163f5761163e615149565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560019350505050611693565b50818061168490615042565b9250506115ac565b6000925050505b919050565b6116aa6116a3611e24565b8383612dd0565b5050565b600a5481565b60008060006008805490509050600091505b80821015611765576000600883815481106116e4576116e3615149565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611751576001935050505061176c565b50818061175d90615042565b9250506116c6565b6000925050505b919050565b606060066000838152602001908152602001600020805461179190614fdf565b80601f01602080910402602001604051908101604052809291908181526020018280546117bd90614fdf565b801561180a5780601f106117df5761010080835404028352916020019161180a565b820191906000526020600020905b8154815290600101906020018083116117ed57829003601f168201915b50505050509050919050565b6000806000600c60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900462ffffff1662ffffff1662ffffff16815250509050806000015192506064816020015162ffffff16856118d29190614e9b565b6118dc9190614e6a565b9150509250929050565b600881815481106118f657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119e7611e24565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611a2d5750611a2c85611a27611e24565b611925565b5b611a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6390614a84565b60405180910390fd5b611a798585858585612f3d565b5050505050565b611a88611e24565b73ffffffffffffffffffffffffffffffffffffffff16611aa6611466565b73ffffffffffffffffffffffffffffffffffffffff1614611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614b44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6390614a04565b60405180910390fd5b611b7581612c67565b50565b611b80611e24565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611bc65750611bc583611bc0611e24565b611925565b5b611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90614a84565b60405180910390fd5b611c108383836131bf565b505050565b611c1d611e24565b73ffffffffffffffffffffffffffffffffffffffff16611c3b611466565b73ffffffffffffffffffffffffffffffffffffffff1614611c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8890614b44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf8906149a4565b60405180910390fd5b6007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a5460405160405180910390a250565b60007ff6b4db6f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e1d5750611e1c826133dc565b5b9050919050565b600033905090565b8151835114611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6790614bc4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed790614ac4565b60405180910390fd5b6000611eea611e24565b9050611efa8187878787876134be565b60005b84518110156120ab576000858281518110611f1b57611f1a615149565b5b602002602001015190506000858381518110611f3a57611f39615149565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd290614b24565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120909190614e14565b92505081905550505050806120a490615042565b9050611efd565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516121229291906148d0565b60405180910390a461213881878787878761351c565b505050505050565b6121486110e7565b612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e90614984565b60405180910390fd5b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6121cb611e24565b6040516121d891906147a8565b60405180910390a1565b6060600082141561222a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061233e565b600082905060005b6000821461225c57808061224590615042565b915050600a826122559190614e6a565b9150612232565b60008167ffffffffffffffff81111561227857612277615178565b5b6040519080825280601f01601f1916602001820160405280156122aa5781602001600182028036833780820191505090505b5090505b60008514612337576001826122c39190614ef5565b9150600a856122d2919061508b565b60306122de9190614e14565b60f81b8183815181106122f4576122f3615149565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123309190614e6a565b94506122ae565b8093505050505b919050565b600060066000848152602001908152602001600020805461236390614fdf565b9050146123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239c90614b64565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906123cc9291906139e9565b507f557048ac18fd52021d0d90ce96e561e0f19e1e82c0136e494435140f629a460f82826040516123fe929190614c3f565b60405180910390a15050565b61271081111561244f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612446906149c4565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff16815250600b600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548162ffffff021916908362ffffff160217905550905050505050565b61271081111561254b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612542906149c4565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff16815250600c600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548162ffffff021916908362ffffff160217905550905050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990614be4565b60405180910390fd5b81518351146126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad90614bc4565b60405180910390fd5b60006126c0611e24565b90506126d1816000878787876134be565b60005b845181101561278a578381815181106126f0576126ef615149565b5b602002602001015160008087848151811061270e5761270d615149565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127709190614e14565b92505081905550808061278290615042565b9150506126d4565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516128029291906148d0565b60405180910390a46128198160008787878761351c565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288790614be4565b60405180910390fd5b600061289a611e24565b90506128bb816000876128ac88613703565b6128b588613703565b876134be565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461291a9190614e14565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612998929190614c6f565b60405180910390a46129af8160008787878761377d565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1d90614b04565b60405180910390fd5b8051825114612a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6190614bc4565b60405180910390fd5b6000612a74611e24565b9050612a94818560008686604051806020016040528060008152506134be565b60005b8351811015612be1576000848281518110612ab557612ab4615149565b5b602002602001015190506000848381518110612ad457612ad3615149565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6c90614a24565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080612bd990615042565b915050612a97565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612c599291906148d0565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d356110e7565b15612d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6c90614aa4565b60405180910390fd5b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612db9611e24565b604051612dc691906147a8565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3690614b84565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f309190614907565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa490614ac4565b60405180910390fd5b6000612fb7611e24565b9050612fd7818787612fc888613703565b612fd188613703565b876134be565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561306e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306590614b24565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131239190614e14565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516131a0929190614c6f565b60405180910390a46131b682888888888861377d565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561322f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322690614b04565b60405180910390fd5b6000613239611e24565b90506132698185600061324b87613703565b61325487613703565b604051806020016040528060008152506134be565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015613300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f790614a24565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516133cd929190614c6f565b60405180910390a45050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806134a757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806134b757506134b682613964565b5b9050919050565b6134c66110e7565b15613506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fd90614aa4565b60405180910390fd5b6135148686868686866139ce565b505050505050565b61353b8473ffffffffffffffffffffffffffffffffffffffff166139d6565b156136fb578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016135819594939291906147c3565b602060405180830381600087803b15801561359b57600080fd5b505af19250505080156135cc57506040513d601f19601f820116820180604052508101906135c99190614242565b60015b613672576135d86151a7565b806308c379a0141561363557506135ed61585b565b806135f85750613637565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362c9190614922565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366990614944565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146136f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f090614964565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561372257613721615178565b5b6040519080825280602002602001820160405280156137505781602001602082028036833780820191505090505b509050828160008151811061376857613767615149565b5b60200260200101818152505080915050919050565b61379c8473ffffffffffffffffffffffffffffffffffffffff166139d6565b1561395c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016137e295949392919061482b565b602060405180830381600087803b1580156137fc57600080fd5b505af192505050801561382d57506040513d601f19601f8201168201806040525081019061382a9190614242565b60015b6138d3576138396151a7565b806308c379a01415613896575061384e61585b565b806138595750613898565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388d9190614922565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ca90614944565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461395a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395190614964565b60405180910390fd5b505b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050505050565b600080823b905060008111915050919050565b8280546139f590614fdf565b90600052602060002090601f016020900481019282613a175760008555613a5e565b82601f10613a3057805160ff1916838001178555613a5e565b82800160010185558215613a5e579182015b82811115613a5d578251825591602001919060010190613a42565b5b509050613a6b9190613a6f565b5090565b5b80821115613a88576000816000905550600101613a70565b5090565b6000613a9f613a9a84614cbd565b614c98565b90508083825260208201905082856020860282011115613ac257613ac16151ce565b5b60005b85811015613af25781613ad88882613c7e565b845260208401935060208301925050600181019050613ac5565b5050509392505050565b6000613b0f613b0a84614ce9565b614c98565b90508083825260208201905082856020860282011115613b3257613b316151ce565b5b60005b85811015613b8057813567ffffffffffffffff811115613b5857613b576151c9565b5b808601613b658982613d8a565b85526020850194506020840193505050600181019050613b35565b5050509392505050565b6000613b9d613b9884614d15565b614c98565b90508083825260208201905082856020860282011115613bc057613bbf6151ce565b5b60005b85811015613bf05781613bd68882613db8565b845260208401935060208301925050600181019050613bc3565b5050509392505050565b6000613c0d613c0884614d41565b614c98565b905082815260208101848484011115613c2957613c286151d3565b5b613c34848285614f9d565b509392505050565b6000613c4f613c4a84614d72565b614c98565b905082815260208101848484011115613c6b57613c6a6151d3565b5b613c76848285614f9d565b509392505050565b600081359050613c8d816158f1565b92915050565b600082601f830112613ca857613ca76151c9565b5b8135613cb8848260208601613a8c565b91505092915050565b600082601f830112613cd657613cd56151c9565b5b8135613ce6848260208601613afc565b91505092915050565b600082601f830112613d0457613d036151c9565b5b8135613d14848260208601613b8a565b91505092915050565b600081359050613d2c81615908565b92915050565b600081359050613d418161591f565b92915050565b600081519050613d568161591f565b92915050565b600082601f830112613d7157613d706151c9565b5b8135613d81848260208601613bfa565b91505092915050565b600082601f830112613d9f57613d9e6151c9565b5b8135613daf848260208601613c3c565b91505092915050565b600081359050613dc781615936565b92915050565b600060208284031215613de357613de26151dd565b5b6000613df184828501613c7e565b91505092915050565b60008060408385031215613e1157613e106151dd565b5b6000613e1f85828601613c7e565b9250506020613e3085828601613c7e565b9150509250929050565b600080600080600060a08688031215613e5657613e556151dd565b5b6000613e6488828901613c7e565b9550506020613e7588828901613c7e565b945050604086013567ffffffffffffffff811115613e9657613e956151d8565b5b613ea288828901613cef565b935050606086013567ffffffffffffffff811115613ec357613ec26151d8565b5b613ecf88828901613cef565b925050608086013567ffffffffffffffff811115613ef057613eef6151d8565b5b613efc88828901613d5c565b9150509295509295909350565b600080600080600060a08688031215613f2557613f246151dd565b5b6000613f3388828901613c7e565b9550506020613f4488828901613c7e565b9450506040613f5588828901613db8565b9350506060613f6688828901613db8565b925050608086013567ffffffffffffffff811115613f8757613f866151d8565b5b613f9388828901613d5c565b9150509295509295909350565b600080600060608486031215613fb957613fb86151dd565b5b6000613fc786828701613c7e565b935050602084013567ffffffffffffffff811115613fe857613fe76151d8565b5b613ff486828701613cef565b925050604084013567ffffffffffffffff811115614015576140146151d8565b5b61402186828701613cef565b9150509250925092565b60008060408385031215614042576140416151dd565b5b600061405085828601613c7e565b925050602061406185828601613d1d565b9150509250929050565b60008060408385031215614082576140816151dd565b5b600061409085828601613c7e565b92505060206140a185828601613db8565b9150509250929050565b6000806000606084860312156140c4576140c36151dd565b5b60006140d286828701613c7e565b93505060206140e386828701613db8565b92505060406140f486828701613db8565b9150509250925092565b60008060408385031215614115576141146151dd565b5b600083013567ffffffffffffffff811115614133576141326151d8565b5b61413f85828601613c93565b925050602083013567ffffffffffffffff8111156141605761415f6151d8565b5b61416c85828601613cef565b9150509250929050565b600080600080608085870312156141905761418f6151dd565b5b600085013567ffffffffffffffff8111156141ae576141ad6151d8565b5b6141ba87828801613cef565b94505060206141cb87828801613db8565b93505060406141dc87828801613db8565b925050606085013567ffffffffffffffff8111156141fd576141fc6151d8565b5b61420987828801613cc1565b91505092959194509250565b60006020828403121561422b5761422a6151dd565b5b600061423984828501613d32565b91505092915050565b600060208284031215614258576142576151dd565b5b600061426684828501613d47565b91505092915050565b600060208284031215614285576142846151dd565b5b600061429384828501613db8565b91505092915050565b600080604083850312156142b3576142b26151dd565b5b60006142c185828601613db8565b92505060206142d285828601613db8565b9150509250929050565b600080600080608085870312156142f6576142f56151dd565b5b600061430487828801613db8565b945050602061431587828801613db8565b935050604061432687828801613db8565b925050606085013567ffffffffffffffff811115614347576143466151d8565b5b61435387828801613d8a565b91505092959194509250565b600061436b838361478a565b60208301905092915050565b61438081614f29565b82525050565b600061439182614db3565b61439b8185614de1565b93506143a683614da3565b8060005b838110156143d75781516143be888261435f565b97506143c983614dd4565b9250506001810190506143aa565b5085935050505092915050565b6143ed81614f3b565b82525050565b60006143fe82614dbe565b6144088185614df2565b9350614418818560208601614fac565b614421816151e2565b840191505092915050565b600061443782614dc9565b6144418185614e03565b9350614451818560208601614fac565b61445a816151e2565b840191505092915050565b6000614472603483614e03565b915061447d82615200565b604082019050919050565b6000614495602883614e03565b91506144a08261524f565b604082019050919050565b60006144b8601483614e03565b91506144c38261529e565b602082019050919050565b60006144db600f83614e03565b91506144e6826152c7565b602082019050919050565b60006144fe601a83614e03565b9150614509826152f0565b602082019050919050565b6000614521602b83614e03565b915061452c82615319565b604082019050919050565b6000614544602683614e03565b915061454f82615368565b604082019050919050565b6000614567602483614e03565b9150614572826153b7565b604082019050919050565b600061458a602183614e03565b915061459582615406565b604082019050919050565b60006145ad602c83614e03565b91506145b882615455565b604082019050919050565b60006145d0602983614e03565b91506145db826154a4565b604082019050919050565b60006145f3601083614e03565b91506145fe826154f3565b602082019050919050565b6000614616602583614e03565b91506146218261551c565b604082019050919050565b6000614639603283614e03565b91506146448261556b565b604082019050919050565b600061465c602383614e03565b9150614667826155ba565b604082019050919050565b600061467f602a83614e03565b915061468a82615609565b604082019050919050565b60006146a2602083614e03565b91506146ad82615658565b602082019050919050565b60006146c5602483614e03565b91506146d082615681565b604082019050919050565b60006146e8602983614e03565b91506146f3826156d0565b604082019050919050565b600061470b602983614e03565b91506147168261571f565b604082019050919050565b600061472e602883614e03565b91506147398261576e565b604082019050919050565b6000614751602183614e03565b915061475c826157bd565b604082019050919050565b6000614774602283614e03565b915061477f8261580c565b604082019050919050565b61479381614f93565b82525050565b6147a281614f93565b82525050565b60006020820190506147bd6000830184614377565b92915050565b600060a0820190506147d86000830188614377565b6147e56020830187614377565b81810360408301526147f78186614386565b9050818103606083015261480b8185614386565b9050818103608083015261481f81846143f3565b90509695505050505050565b600060a0820190506148406000830188614377565b61484d6020830187614377565b61485a6040830186614799565b6148676060830185614799565b818103608083015261487981846143f3565b90509695505050505050565b600060408201905061489a6000830185614377565b6148a76020830184614799565b9392505050565b600060208201905081810360008301526148c88184614386565b905092915050565b600060408201905081810360008301526148ea8185614386565b905081810360208301526148fe8184614386565b90509392505050565b600060208201905061491c60008301846143e4565b92915050565b6000602082019050818103600083015261493c818461442c565b905092915050565b6000602082019050818103600083015261495d81614465565b9050919050565b6000602082019050818103600083015261497d81614488565b9050919050565b6000602082019050818103600083015261499d816144ab565b9050919050565b600060208201905081810360008301526149bd816144ce565b9050919050565b600060208201905081810360008301526149dd816144f1565b9050919050565b600060208201905081810360008301526149fd81614514565b9050919050565b60006020820190508181036000830152614a1d81614537565b9050919050565b60006020820190508181036000830152614a3d8161455a565b9050919050565b60006020820190508181036000830152614a5d8161457d565b9050919050565b60006020820190508181036000830152614a7d816145a0565b9050919050565b60006020820190508181036000830152614a9d816145c3565b9050919050565b60006020820190508181036000830152614abd816145e6565b9050919050565b60006020820190508181036000830152614add81614609565b9050919050565b60006020820190508181036000830152614afd8161462c565b9050919050565b60006020820190508181036000830152614b1d8161464f565b9050919050565b60006020820190508181036000830152614b3d81614672565b9050919050565b60006020820190508181036000830152614b5d81614695565b9050919050565b60006020820190508181036000830152614b7d816146b8565b9050919050565b60006020820190508181036000830152614b9d816146db565b9050919050565b60006020820190508181036000830152614bbd816146fe565b9050919050565b60006020820190508181036000830152614bdd81614721565b9050919050565b60006020820190508181036000830152614bfd81614744565b9050919050565b60006020820190508181036000830152614c1d81614767565b9050919050565b6000602082019050614c396000830184614799565b92915050565b6000604082019050614c546000830185614799565b8181036020830152614c66818461442c565b90509392505050565b6000604082019050614c846000830185614799565b614c916020830184614799565b9392505050565b6000614ca2614cb3565b9050614cae8282615011565b919050565b6000604051905090565b600067ffffffffffffffff821115614cd857614cd7615178565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614d0457614d03615178565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614d3057614d2f615178565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614d5c57614d5b615178565b5b614d65826151e2565b9050602081019050919050565b600067ffffffffffffffff821115614d8d57614d8c615178565b5b614d96826151e2565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614e1f82614f93565b9150614e2a83614f93565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e5f57614e5e6150bc565b5b828201905092915050565b6000614e7582614f93565b9150614e8083614f93565b925082614e9057614e8f6150eb565b5b828204905092915050565b6000614ea682614f93565b9150614eb183614f93565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eea57614ee96150bc565b5b828202905092915050565b6000614f0082614f93565b9150614f0b83614f93565b925082821015614f1e57614f1d6150bc565b5b828203905092915050565b6000614f3482614f73565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614fca578082015181840152602081019050614faf565b83811115614fd9576000848401525b50505050565b60006002820490506001821680614ff757607f821691505b6020821081141561500b5761500a61511a565b5b50919050565b61501a826151e2565b810181811067ffffffffffffffff8211171561503957615038615178565b5b80604052505050565b600061504d82614f93565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150805761507f6150bc565b5b600182019050919050565b600061509682614f93565b91506150a183614f93565b9250826150b1576150b06150eb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156151c65760046000803e6151c36000516151f3565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b7f45524332393831526f79616c746965733a20546f6f2068696768000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420656c696769626c6520746f204d696e742069746560008201527f6d00000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f752061726520616c6c6f7720746f206d696e74206d61782031302069746560008201527f6d7320617420612074696d650000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f43616e6e6f7420736574207468652075726920747769636520666f722061207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420656c696769626c6520746f204d696e742069746560008201527f6d73000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561586b576158ee565b615873614cb3565b60043d036004823e80513d602482011167ffffffffffffffff8211171561589b5750506158ee565b808201805167ffffffffffffffff8111156158b957505050506158ee565b80602083010160043d0385018111156158d65750505050506158ee565b6158e582602001850186615011565b82955050505050505b90565b6158fa81614f29565b811461590557600080fd5b50565b61591181614f3b565b811461591c57600080fd5b50565b61592881614f47565b811461593357600080fd5b50565b61593f81614f93565b811461594a57600080fd5b5056fea264697066735822122008c0ccd0d00b4dd4db3e4ac96aa3f56d5a72aed74e2543f6f0f30c0cd1c493e464736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4163746976656c696e6b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044143545600000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a4163746976656c696e6b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044143545600000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Activelink
Arg [1] : _symbol (string): ACTV
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [3] : 4163746976656c696e6b00000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 4143545600000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
42910:7461:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26619:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50193:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43023:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26363:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49193:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;28558:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47793:345;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48299:65;;;:::i;:::-;;27016:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45937:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45032:866;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44527:468;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3300:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40888:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6205:103;;;:::i;:::-;;47304:441;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48186:61;;;:::i;:::-;;5554:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43072:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46608:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27613:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43411:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46197:355;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44365:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49537:348;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;43286:31;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27840:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43353:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28080:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6463:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40559:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47058:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26619:231;26705:7;26752:1;26733:21;;:7;:21;;;;26725:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;26820:9;:13;26830:2;26820:13;;;;;;;;;;;:22;26834:7;26820:22;;;;;;;;;;;;;;;;26813:29;;26619:231;;;;:::o;50193:175::-;50300:4;50324:36;50348:11;50324:23;:36::i;:::-;50317:43;;50193:175;;;:::o;43023:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26363:105::-;26423:13;26456:4;26449:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26363:105;;;:::o;49193:336::-;49314:16;49332:21;49371:28;49402:10;:19;49413:7;49402:19;;;;;;;;;;;49371:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49443:9;:19;;;49432:30;;49518:3;49498:9;:16;;;49490:24;;:5;:24;;;;:::i;:::-;49489:32;;;;:::i;:::-;49473:48;;49360:169;49193:336;;;;;:::o;28558:442::-;28799:12;:10;:12::i;:::-;28791:20;;:4;:20;;;:60;;;;28815:36;28832:4;28838:12;:10;:12::i;:::-;28815:16;:36::i;:::-;28791:60;28769:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;28940:52;28963:4;28969:2;28973:3;28978:7;28987:4;28940:22;:52::i;:::-;28558:442;;;;;:::o;47793:345::-;47854:4;47871:6;47888:11;47902:9;:16;;;;47888:30;;47938:1;47934:5;;47929:179;47945:6;47941:1;:10;47929:179;;;47973:19;47995:9;48005:1;47995:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47973:34;;48041:8;48026:23;;:11;:23;;;48022:75;;;48077:4;48070:11;;;;;;;48022:75;47958:150;47953:3;;;;;:::i;:::-;;;;47929:179;;;48125:5;48118:12;;;;47793:345;;;;:::o;48299:65::-;5785:12;:10;:12::i;:::-;5774:23;;:7;:5;:7::i;:::-;:23;;;5766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48346:10:::1;:8;:10::i;:::-;48299:65::o:0;27016:524::-;27172:16;27233:3;:10;27214:8;:15;:29;27206:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27302:30;27349:8;:15;27335:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27302:63;;27383:9;27378:122;27402:8;:15;27398:1;:19;27378:122;;;27458:30;27468:8;27477:1;27468:11;;;;;;;;:::i;:::-;;;;;;;;27481:3;27485:1;27481:6;;;;;;;;:::i;:::-;;;;;;;;27458:9;:30::i;:::-;27439:13;27453:1;27439:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;27419:3;;;;:::i;:::-;;;27378:122;;;;27519:13;27512:20;;;27016:524;;;;:::o;45937:207::-;5785:12;:10;:12::i;:::-;5774:23;;:7;:5;:7::i;:::-;:23;;;5766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46036:1:::1;46016:22;;:8;:22;;;;46008:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;46069:14;46089:8;46069:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46127:8;46114:22;;;;;;;;;;;;45937:207:::0;:::o;45032:866::-;3626:8;:6;:8::i;:::-;3625:9;3617:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;45197:25:::1;45211:10;45197:13;:25::i;:::-;45189:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;45298:2;45280:7;:14;:20;;45272:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;45360:20;45397:7;:14;45383:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45360:52;;45423:25;:30;;;;;;;;;;;::::0;::::1;;45469:9;45464:372;45488:7;:14;45484:1;:18;45464:372;;;45551:1;45540:8;;:12;;;;:::i;:::-;45529:8;:23;;;;45577:8;;45568:3;45572:1;45568:6;;;;;;;;:::i;:::-;;;;;;;:17;;;::::0;::::1;45615:26;45632:8;;45615:16;:26::i;:::-;45603:38;;45658:30;45671:8;;45681:3;45685:1;45681:6;;;;;;;;:::i;:::-;;;;;;;;45658:12;:30::i;:::-;45703:47;45720:8;;45730:10;45742:7;45703:16;:47::i;:::-;45765:51;45784:8;;45794:10;45806:9;45765:18;:51::i;:::-;45504:3;;;;;:::i;:::-;;;;45464:372;;;;45846:44;45857:10;45869:3;45874:7;45846:44;;;;;;;;;;;;;;;;::::0;:10:::1;:44::i;:::-;45178:720;;45032:866:::0;;;;:::o;44527:468::-;3626:8;:6;:8::i;:::-;3625:9;3617:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44678:25:::1;44692:10;44678:13;:25::i;:::-;44670:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44774:1;44763:8;;:12;;;;:::i;:::-;44752:8;:23;;;;44786:27;44799:8;;44809:3;44786:12;:27::i;:::-;44824:47;44841:8;;44851:10;44863:7;44824:16;:47::i;:::-;44882:51;44901:8;;44911:10;44923:9;44882:18;:51::i;:::-;44944:43;44950:10;44962:8;;44972:6;44944:43;;;;;;;;;;;;;;;;::::0;:5:::1;:43::i;:::-;44527:468:::0;;;;:::o;3300:86::-;3347:4;3371:7;;;;;;;;;;;3364:14;;3300:86;:::o;40888:353::-;41064:12;:10;:12::i;:::-;41053:23;;:7;:23;;;:66;;;;41080:39;41097:7;41106:12;:10;:12::i;:::-;41080:16;:39::i;:::-;41053:66;41031:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;41201:32;41212:7;41221:3;41226:6;41201:10;:32::i;:::-;40888:353;;;:::o;6205:103::-;5785:12;:10;:12::i;:::-;5774:23;;:7;:5;:7::i;:::-;:23;;;5766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6270:30:::1;6297:1;6270:18;:30::i;:::-;6205:103::o:0;47304:441::-;47372:4;5785:12;:10;:12::i;:::-;5774:23;;:7;:5;:7::i;:::-;:23;;;5766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47389:6:::1;47406:11:::0;47420:9:::1;:16;;;;47406:30;;47456:1;47452:5;;47447:268;47463:6;47459:1;:10;47447:268;;;47491:19;47513:9;47523:1;47513:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47491:34;;47559:8;47544:23;;:11;:23;;;47540:164;;;47594:9;47604:1;47594:12;;;;;;;;:::i;:::-;;;;;;;;;;47587:19;;;;;;;;;;;47650:8;47629:30;;;;;;;;;;;;47684:4;47677:11;;;;;;;47540:164;47476:239;47471:3;;;;;:::i;:::-;;;;47447:268;;;47732:5;47725:12;;;;5845:1;47304:441:::0;;;:::o;48186:61::-;5785:12;:10;:12::i;:::-;5774:23;;:7;:5;:7::i;:::-;:23;;;5766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48231:8:::1;:6;:8::i;:::-;48186:61::o:0;5554:87::-;5600:7;5627:6;;;;;;;;;;;5620:13;;5554:87;:::o;43072:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46608:406::-;46679:4;5785:12;:10;:12::i;:::-;5774:23;;:7;:5;:7::i;:::-;:23;;;5766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46696:6:::1;46713:11:::0;46727:14:::1;:21;;;;46713:35;;46768:1;46764:5;;46759:225;46775:6;46771:1;:10;46759:225;;;46803:19;46825:14;46840:1;46825:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46803:39;;46876:8;46861:23;;:11;:23;;;46857:116;;;46911:14;46926:1;46911:17;;;;;;;;:::i;:::-;;;;;;;;;;46904:24;;;;;;;;;;;46953:4;46946:11;;;;;;;46857:116;46788:196;46783:3;;;;;:::i;:::-;;;;46759:225;;;47001:5;46994:12;;;;5845:1;46608:406:::0;;;:::o;27613:155::-;27708:52;27727:12;:10;:12::i;:::-;27741:8;27751;27708:18;:52::i;:::-;27613:155;;:::o;43411:27::-;;;;:::o;46197:355::-;46258:4;46275:6;46292:11;46306:14;:21;;;;46292:35;;46347:1;46343:5;;46338:184;46354:6;46350:1;:10;46338:184;;;46382:19;46404:14;46419:1;46404:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46382:39;;46455:8;46440:23;;:11;:23;;;46436:75;;;46491:4;46484:11;;;;;;;46436:75;46367:155;46362:3;;;;;:::i;:::-;;;;46338:184;;;46539:5;46532:12;;;;46197:355;;;;:::o;44365:120::-;44428:17;44463:5;:14;44469:7;44463:14;;;;;;;;;;;44457:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44365:120;;;:::o;49537:348::-;49660:16;49678:21;49717:32;49752:12;:21;49765:7;49752:21;;;;;;;;;;;49717:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49795:11;:21;;;49784:32;;49874:3;49852:11;:18;;;49844:26;;:5;:26;;;;:::i;:::-;49843:34;;;;:::i;:::-;49827:50;;49706:179;49537:348;;;;;:::o;43286:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27840:168::-;27939:4;27963:18;:27;27982:7;27963:27;;;;;;;;;;;;;;;:37;27991:8;27963:37;;;;;;;;;;;;;;;;;;;;;;;;;27956:44;;27840:168;;;;:::o;43353:33::-;;;;;;;;;;;;;:::o;28080:401::-;28296:12;:10;:12::i;:::-;28288:20;;:4;:20;;;:60;;;;28312:36;28329:4;28335:12;:10;:12::i;:::-;28312:16;:36::i;:::-;28288:60;28266:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;28428:45;28446:4;28452:2;28456;28460:6;28468:4;28428:17;:45::i;:::-;28080:401;;;;;:::o;6463:201::-;5785:12;:10;:12::i;:::-;5774:23;;:7;:5;:7::i;:::-;:23;;;5766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6572:1:::1;6552:22;;:8;:22;;;;6544:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6628:28;6647:8;6628:18;:28::i;:::-;6463:201:::0;:::o;40559:321::-;40710:12;:10;:12::i;:::-;40699:23;;:7;:23;;;:66;;;;40726:39;40743:7;40752:12;:10;:12::i;:::-;40726:16;:39::i;:::-;40699:66;40677:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;40847:25;40853:7;40862:2;40866:5;40847;:25::i;:::-;40559:321;;;:::o;47058:198::-;5785:12;:10;:12::i;:::-;5774:23;;:7;:5;:7::i;:::-;:23;;;5766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47154:1:::1;47134:22;;:8;:22;;;;47126:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;47187:9;47202:8;47187:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47239:8;47227:21;;;;;;;;;;;;47058:198:::0;:::o;42512:283::-;42642:4;42699:35;42684:50;;;:11;:50;;;;:103;;;;42751:36;42775:11;42751:23;:36::i;:::-;42684:103;42664:123;;42512:283;;;:::o;718:98::-;771:7;798:10;791:17;;718:98;:::o;30642:1074::-;30869:7;:14;30855:3;:10;:28;30847:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30961:1;30947:16;;:2;:16;;;;30939:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31018:16;31037:12;:10;:12::i;:::-;31018:31;;31062:60;31083:8;31093:4;31099:2;31103:3;31108:7;31117:4;31062:20;:60::i;:::-;31140:9;31135:421;31159:3;:10;31155:1;:14;31135:421;;;31191:10;31204:3;31208:1;31204:6;;;;;;;;:::i;:::-;;;;;;;;31191:19;;31225:14;31242:7;31250:1;31242:10;;;;;;;;:::i;:::-;;;;;;;;31225:27;;31269:19;31291:9;:13;31301:2;31291:13;;;;;;;;;;;:19;31305:4;31291:19;;;;;;;;;;;;;;;;31269:41;;31348:6;31333:11;:21;;31325:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31481:6;31467:11;:20;31445:9;:13;31455:2;31445:13;;;;;;;;;;;:19;31459:4;31445:19;;;;;;;;;;;;;;;:42;;;;31538:6;31517:9;:13;31527:2;31517:13;;;;;;;;;;;:17;31531:2;31517:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31176:380;;;31171:3;;;;:::i;:::-;;;31135:421;;;;31603:2;31573:47;;31597:4;31573:47;;31587:8;31573:47;;;31607:3;31612:7;31573:47;;;;;;;:::i;:::-;;;;;;;;31633:75;31669:8;31679:4;31685:2;31689:3;31694:7;31703:4;31633:35;:75::i;:::-;30836:880;30642:1074;;;;;:::o;4359:120::-;3903:8;:6;:8::i;:::-;3895:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;4428:5:::1;4418:7;;:15;;;;;;;;;;;;;;;;;;4449:22;4458:12;:10;:12::i;:::-;4449:22;;;;;;:::i;:::-;;;;;;;;4359:120::o:0;1621:532::-;1677:13;1716:1;1707:5;:10;1703:53;;;1734:10;;;;;;;;;;;;;;;;;;;;;1703:53;1766:12;1781:5;1766:20;;1797:14;1822:78;1837:1;1829:4;:9;1822:78;;1855:8;;;;;:::i;:::-;;;;1886:2;1878:10;;;;;:::i;:::-;;;1822:78;;;1910:19;1942:6;1932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1910:39;;1960:154;1976:1;1967:5;:10;1960:154;;2004:1;1994:11;;;;;:::i;:::-;;;2071:2;2063:5;:10;;;;:::i;:::-;2050:2;:24;;;;:::i;:::-;2037:39;;2020:6;2027;2020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2100:2;2091:11;;;;;:::i;:::-;;;1960:154;;;2138:6;2124:21;;;;;1621:532;;;;:::o;44108:232::-;44225:1;44199:5;:14;44205:7;44199:14;;;;;;;;;;;44193:28;;;;;:::i;:::-;;;:33;44185:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;44295:3;44278:5;:14;44284:7;44278:14;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;44314:18;44319:7;44328:3;44314:18;;;;;;;:::i;:::-;;;;;;;;44108:232;;:::o;48608:262::-;48756:5;48747;:14;;48739:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;48825:37;;;;;;;;48837:9;48825:37;;;;;;48855:5;48825:37;;;;;48803:10;:19;48814:7;48803:19;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48608:262;;;:::o;48878:268::-;49028:5;49019;:14;;49011:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;49099:39;;;;;;;;49113:9;49099:39;;;;;;49131:5;49099:39;;;;;49075:12;:21;49088:7;49075:21;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48878:268;;;:::o;33959:735::-;34151:1;34137:16;;:2;:16;;;;34129:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34224:7;:14;34210:3;:10;:28;34202:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34296:16;34315:12;:10;:12::i;:::-;34296:31;;34340:66;34361:8;34379:1;34383:2;34387:3;34392:7;34401:4;34340:20;:66::i;:::-;34424:9;34419:103;34443:3;:10;34439:1;:14;34419:103;;;34500:7;34508:1;34500:10;;;;;;;;:::i;:::-;;;;;;;;34475:9;:17;34485:3;34489:1;34485:6;;;;;;;;:::i;:::-;;;;;;;;34475:17;;;;;;;;;;;:21;34493:2;34475:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;34455:3;;;;;:::i;:::-;;;;34419:103;;;;34575:2;34539:53;;34571:1;34539:53;;34553:8;34539:53;;;34579:3;34584:7;34539:53;;;;;;;:::i;:::-;;;;;;;;34605:81;34641:8;34659:1;34663:2;34667:3;34672:7;34681:4;34605:35;:81::i;:::-;34118:576;33959:735;;;;:::o;33034:569::-;33201:1;33187:16;;:2;:16;;;;33179:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33254:16;33273:12;:10;:12::i;:::-;33254:31;;33298:102;33319:8;33337:1;33341:2;33345:21;33363:2;33345:17;:21::i;:::-;33368:25;33386:6;33368:17;:25::i;:::-;33395:4;33298:20;:102::i;:::-;33434:6;33413:9;:13;33423:2;33413:13;;;;;;;;;;;:17;33427:2;33413:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;33493:2;33456:52;;33489:1;33456:52;;33471:8;33456:52;;;33497:2;33501:6;33456:52;;;;;;;:::i;:::-;;;;;;;;33521:74;33552:8;33570:1;33574:2;33578;33582:6;33590:4;33521:30;:74::i;:::-;33168:435;33034:569;;;;:::o;35795:891::-;35963:1;35947:18;;:4;:18;;;;35939:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36038:7;:14;36024:3;:10;:28;36016:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36110:16;36129:12;:10;:12::i;:::-;36110:31;;36154:66;36175:8;36185:4;36199:1;36203:3;36208:7;36154:66;;;;;;;;;;;;:20;:66::i;:::-;36238:9;36233:373;36257:3;:10;36253:1;:14;36233:373;;;36289:10;36302:3;36306:1;36302:6;;;;;;;;:::i;:::-;;;;;;;;36289:19;;36323:14;36340:7;36348:1;36340:10;;;;;;;;:::i;:::-;;;;;;;;36323:27;;36367:19;36389:9;:13;36399:2;36389:13;;;;;;;;;;;:19;36403:4;36389:19;;;;;;;;;;;;;;;;36367:41;;36446:6;36431:11;:21;;36423:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36573:6;36559:11;:20;36537:9;:13;36547:2;36537:13;;;;;;;;;;;:19;36551:4;36537:19;;;;;;;;;;;;;;;:42;;;;36274:332;;;36269:3;;;;;:::i;:::-;;;;36233:373;;;;36661:1;36623:55;;36647:4;36623:55;;36637:8;36623:55;;;36665:3;36670:7;36623:55;;;;;;;:::i;:::-;;;;;;;;35928:758;35795:891;;;:::o;6824:191::-;6898:16;6917:6;;;;;;;;;;;6898:25;;6943:8;6934:6;;:17;;;;;;;;;;;;;;;;;;6998:8;6967:40;;6988:8;6967:40;;;;;;;;;;;;6887:128;6824:191;:::o;4100:118::-;3626:8;:6;:8::i;:::-;3625:9;3617:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4170:4:::1;4160:7;;:14;;;;;;;;;;;;;;;;;;4190:20;4197:12;:10;:12::i;:::-;4190:20;;;;;;:::i;:::-;;;;;;;;4100:118::o:0;36828:331::-;36983:8;36974:17;;:5;:17;;;;36966:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37086:8;37048:18;:25;37067:5;37048:25;;;;;;;;;;;;;;;:35;37074:8;37048:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37132:8;37110:41;;37125:5;37110:41;;;37142:8;37110:41;;;;;;:::i;:::-;;;;;;;;36828:331;;;:::o;29464:820::-;29666:1;29652:16;;:2;:16;;;;29644:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29723:16;29742:12;:10;:12::i;:::-;29723:31;;29767:96;29788:8;29798:4;29804:2;29808:21;29826:2;29808:17;:21::i;:::-;29831:25;29849:6;29831:17;:25::i;:::-;29858:4;29767:20;:96::i;:::-;29876:19;29898:9;:13;29908:2;29898:13;;;;;;;;;;;:19;29912:4;29898:19;;;;;;;;;;;;;;;;29876:41;;29951:6;29936:11;:21;;29928:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30076:6;30062:11;:20;30040:9;:13;30050:2;30040:13;;;;;;;;;;;:19;30054:4;30040:19;;;;;;;;;;;;;;;:42;;;;30125:6;30104:9;:13;30114:2;30104:13;;;;;;;;;;;:17;30118:2;30104:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30180:2;30149:46;;30174:4;30149:46;;30164:8;30149:46;;;30184:2;30188:6;30149:46;;;;;;;:::i;:::-;;;;;;;;30208:68;30239:8;30249:4;30255:2;30259;30263:6;30271:4;30208:30;:68::i;:::-;29633:651;;29464:820;;;;;:::o;34944:648::-;35087:1;35071:18;;:4;:18;;;;35063:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35142:16;35161:12;:10;:12::i;:::-;35142:31;;35186:102;35207:8;35217:4;35231:1;35235:21;35253:2;35235:17;:21::i;:::-;35258:25;35276:6;35258:17;:25::i;:::-;35186:102;;;;;;;;;;;;:20;:102::i;:::-;35301:19;35323:9;:13;35333:2;35323:13;;;;;;;;;;;:19;35337:4;35323:19;;;;;;;;;;;;;;;;35301:41;;35376:6;35361:11;:21;;35353:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35495:6;35481:11;:20;35459:9;:13;35469:2;35459:13;;;;;;;;;;;:19;35473:4;35459:19;;;;;;;;;;;;;;;:42;;;;35569:1;35530:54;;35555:4;35530:54;;35545:8;35530:54;;;35573:2;35577:6;35530:54;;;;;;;:::i;:::-;;;;;;;;35052:540;;34944:648;;;:::o;25642:310::-;25744:4;25796:26;25781:41;;;:11;:41;;;;:110;;;;25854:37;25839:52;;;:11;:52;;;;25781:110;:163;;;;25908:36;25932:11;25908:23;:36::i;:::-;25781:163;25761:183;;25642:310;;;:::o;49893:292::-;3626:8;:6;:8::i;:::-;3625:9;3617:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;50110:67:::1;50137:8;50147:4;50153:2;50157:3;50162:7;50171:5;50110:26;:67::i;:::-;49893:292:::0;;;;;;:::o;39096:813::-;39336:15;:2;:13;;;:15::i;:::-;39332:570;;;39389:2;39372:43;;;39416:8;39426:4;39432:3;39437:7;39446:4;39372:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39368:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;39764:6;39757:14;;;;;;;;;;;:::i;:::-;;;;;;;;39368:523;;;39813:62;;;;;;;;;;:::i;:::-;;;;;;;;39368:523;39545:48;;;39533:60;;;:8;:60;;;;39529:159;;39618:50;;;;;;;;;;:::i;:::-;;;;;;;;39529:159;39452:251;39332:570;39096:813;;;;;;:::o;39917:198::-;39983:16;40012:22;40051:1;40037:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40012:41;;40075:7;40064:5;40070:1;40064:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40102:5;40095:12;;;39917:198;;;:::o;38344:744::-;38559:15;:2;:13;;;:15::i;:::-;38555:526;;;38612:2;38595:38;;;38634:8;38644:4;38650:2;38654:6;38662:4;38595:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38591:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38943:6;38936:14;;;;;;;;;;;:::i;:::-;;;;;;;;38591:479;;;38992:62;;;;;;;;;;:::i;:::-;;;;;;;;38591:479;38729:43;;;38717:55;;;:8;:55;;;;38713:154;;38797:50;;;;;;;;;;:::i;:::-;;;;;;;;38713:154;38668:214;38555:526;38344:744;;;;;;:::o;16973:157::-;17058:4;17097:25;17082:40;;;:11;:40;;;;17075:47;;16973:157;;;:::o;38115:221::-;;;;;;;:::o;7848:387::-;7908:4;8116:12;8183:7;8171:20;8163:28;;8226:1;8219:4;:8;8212:15;;;7848:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;768:957::-;874:5;899:91;915:74;982:6;915:74;:::i;:::-;899:91;:::i;:::-;890:100;;1010:5;1039:6;1032:5;1025:21;1073:4;1066:5;1062:16;1055:23;;1099:6;1149:3;1141:4;1133:6;1129:17;1124:3;1120:27;1117:36;1114:143;;;1168:79;;:::i;:::-;1114:143;1281:1;1266:453;1291:6;1288:1;1285:13;1266:453;;;1373:3;1360:17;1409:18;1396:11;1393:35;1390:122;;;1431:79;;:::i;:::-;1390:122;1555:11;1547:6;1543:24;1593:47;1636:3;1624:10;1593:47;:::i;:::-;1588:3;1581:60;1670:4;1665:3;1661:14;1654:21;;1704:4;1699:3;1695:14;1688:21;;1326:393;;1313:1;1310;1306:9;1301:14;;1266:453;;;1270:14;880:845;;768:957;;;;;:::o;1748:722::-;1844:5;1869:81;1885:64;1942:6;1885:64;:::i;:::-;1869:81;:::i;:::-;1860:90;;1970:5;1999:6;1992:5;1985:21;2033:4;2026:5;2022:16;2015:23;;2059:6;2109:3;2101:4;2093:6;2089:17;2084:3;2080:27;2077:36;2074:143;;;2128:79;;:::i;:::-;2074:143;2241:1;2226:238;2251:6;2248:1;2245:13;2226:238;;;2319:3;2348:37;2381:3;2369:10;2348:37;:::i;:::-;2343:3;2336:50;2415:4;2410:3;2406:14;2399:21;;2449:4;2444:3;2440:14;2433:21;;2286:178;2273:1;2270;2266:9;2261:14;;2226:238;;;2230:14;1850:620;;1748:722;;;;;:::o;2476:410::-;2553:5;2578:65;2594:48;2635:6;2594:48;:::i;:::-;2578:65;:::i;:::-;2569:74;;2666:6;2659:5;2652:21;2704:4;2697:5;2693:16;2742:3;2733:6;2728:3;2724:16;2721:25;2718:112;;;2749:79;;:::i;:::-;2718:112;2839:41;2873:6;2868:3;2863;2839:41;:::i;:::-;2559:327;2476:410;;;;;:::o;2892:412::-;2970:5;2995:66;3011:49;3053:6;3011:49;:::i;:::-;2995:66;:::i;:::-;2986:75;;3084:6;3077:5;3070:21;3122:4;3115:5;3111:16;3160:3;3151:6;3146:3;3142:16;3139:25;3136:112;;;3167:79;;:::i;:::-;3136:112;3257:41;3291:6;3286:3;3281;3257:41;:::i;:::-;2976:328;2892:412;;;;;:::o;3310:139::-;3356:5;3394:6;3381:20;3372:29;;3410:33;3437:5;3410:33;:::i;:::-;3310:139;;;;:::o;3472:370::-;3543:5;3592:3;3585:4;3577:6;3573:17;3569:27;3559:122;;3600:79;;:::i;:::-;3559:122;3717:6;3704:20;3742:94;3832:3;3824:6;3817:4;3809:6;3805:17;3742:94;:::i;:::-;3733:103;;3549:293;3472:370;;;;:::o;3864:390::-;3945:5;3994:3;3987:4;3979:6;3975:17;3971:27;3961:122;;4002:79;;:::i;:::-;3961:122;4119:6;4106:20;4144:104;4244:3;4236:6;4229:4;4221:6;4217:17;4144:104;:::i;:::-;4135:113;;3951:303;3864:390;;;;:::o;4277:370::-;4348:5;4397:3;4390:4;4382:6;4378:17;4374:27;4364:122;;4405:79;;:::i;:::-;4364:122;4522:6;4509:20;4547:94;4637:3;4629:6;4622:4;4614:6;4610:17;4547:94;:::i;:::-;4538:103;;4354:293;4277:370;;;;:::o;4653:133::-;4696:5;4734:6;4721:20;4712:29;;4750:30;4774:5;4750:30;:::i;:::-;4653:133;;;;:::o;4792:137::-;4837:5;4875:6;4862:20;4853:29;;4891:32;4917:5;4891:32;:::i;:::-;4792:137;;;;:::o;4935:141::-;4991:5;5022:6;5016:13;5007:22;;5038:32;5064:5;5038:32;:::i;:::-;4935:141;;;;:::o;5095:338::-;5150:5;5199:3;5192:4;5184:6;5180:17;5176:27;5166:122;;5207:79;;:::i;:::-;5166:122;5324:6;5311:20;5349:78;5423:3;5415:6;5408:4;5400:6;5396:17;5349:78;:::i;:::-;5340:87;;5156:277;5095:338;;;;:::o;5453:340::-;5509:5;5558:3;5551:4;5543:6;5539:17;5535:27;5525:122;;5566:79;;:::i;:::-;5525:122;5683:6;5670:20;5708:79;5783:3;5775:6;5768:4;5760:6;5756:17;5708:79;:::i;:::-;5699:88;;5515:278;5453:340;;;;:::o;5799:139::-;5845:5;5883:6;5870:20;5861:29;;5899:33;5926:5;5899:33;:::i;:::-;5799:139;;;;:::o;5944:329::-;6003:6;6052:2;6040:9;6031:7;6027:23;6023:32;6020:119;;;6058:79;;:::i;:::-;6020:119;6178:1;6203:53;6248:7;6239:6;6228:9;6224:22;6203:53;:::i;:::-;6193:63;;6149:117;5944:329;;;;:::o;6279:474::-;6347:6;6355;6404:2;6392:9;6383:7;6379:23;6375:32;6372:119;;;6410:79;;:::i;:::-;6372:119;6530:1;6555:53;6600:7;6591:6;6580:9;6576:22;6555:53;:::i;:::-;6545:63;;6501:117;6657:2;6683:53;6728:7;6719:6;6708:9;6704:22;6683:53;:::i;:::-;6673:63;;6628:118;6279:474;;;;;:::o;6759:1509::-;6913:6;6921;6929;6937;6945;6994:3;6982:9;6973:7;6969:23;6965:33;6962:120;;;7001:79;;:::i;:::-;6962:120;7121:1;7146:53;7191:7;7182:6;7171:9;7167:22;7146:53;:::i;:::-;7136:63;;7092:117;7248:2;7274:53;7319:7;7310:6;7299:9;7295:22;7274:53;:::i;:::-;7264:63;;7219:118;7404:2;7393:9;7389:18;7376:32;7435:18;7427:6;7424:30;7421:117;;;7457:79;;:::i;:::-;7421:117;7562:78;7632:7;7623:6;7612:9;7608:22;7562:78;:::i;:::-;7552:88;;7347:303;7717:2;7706:9;7702:18;7689:32;7748:18;7740:6;7737:30;7734:117;;;7770:79;;:::i;:::-;7734:117;7875:78;7945:7;7936:6;7925:9;7921:22;7875:78;:::i;:::-;7865:88;;7660:303;8030:3;8019:9;8015:19;8002:33;8062:18;8054:6;8051:30;8048:117;;;8084:79;;:::i;:::-;8048:117;8189:62;8243:7;8234:6;8223:9;8219:22;8189:62;:::i;:::-;8179:72;;7973:288;6759:1509;;;;;;;;:::o;8274:1089::-;8378:6;8386;8394;8402;8410;8459:3;8447:9;8438:7;8434:23;8430:33;8427:120;;;8466:79;;:::i;:::-;8427:120;8586:1;8611:53;8656:7;8647:6;8636:9;8632:22;8611:53;:::i;:::-;8601:63;;8557:117;8713:2;8739:53;8784:7;8775:6;8764:9;8760:22;8739:53;:::i;:::-;8729:63;;8684:118;8841:2;8867:53;8912:7;8903:6;8892:9;8888:22;8867:53;:::i;:::-;8857:63;;8812:118;8969:2;8995:53;9040:7;9031:6;9020:9;9016:22;8995:53;:::i;:::-;8985:63;;8940:118;9125:3;9114:9;9110:19;9097:33;9157:18;9149:6;9146:30;9143:117;;;9179:79;;:::i;:::-;9143:117;9284:62;9338:7;9329:6;9318:9;9314:22;9284:62;:::i;:::-;9274:72;;9068:288;8274:1089;;;;;;;;:::o;9369:1039::-;9496:6;9504;9512;9561:2;9549:9;9540:7;9536:23;9532:32;9529:119;;;9567:79;;:::i;:::-;9529:119;9687:1;9712:53;9757:7;9748:6;9737:9;9733:22;9712:53;:::i;:::-;9702:63;;9658:117;9842:2;9831:9;9827:18;9814:32;9873:18;9865:6;9862:30;9859:117;;;9895:79;;:::i;:::-;9859:117;10000:78;10070:7;10061:6;10050:9;10046:22;10000:78;:::i;:::-;9990:88;;9785:303;10155:2;10144:9;10140:18;10127:32;10186:18;10178:6;10175:30;10172:117;;;10208:79;;:::i;:::-;10172:117;10313:78;10383:7;10374:6;10363:9;10359:22;10313:78;:::i;:::-;10303:88;;10098:303;9369:1039;;;;;:::o;10414:468::-;10479:6;10487;10536:2;10524:9;10515:7;10511:23;10507:32;10504:119;;;10542:79;;:::i;:::-;10504:119;10662:1;10687:53;10732:7;10723:6;10712:9;10708:22;10687:53;:::i;:::-;10677:63;;10633:117;10789:2;10815:50;10857:7;10848:6;10837:9;10833:22;10815:50;:::i;:::-;10805:60;;10760:115;10414:468;;;;;:::o;10888:474::-;10956:6;10964;11013:2;11001:9;10992:7;10988:23;10984:32;10981:119;;;11019:79;;:::i;:::-;10981:119;11139:1;11164:53;11209:7;11200:6;11189:9;11185:22;11164:53;:::i;:::-;11154:63;;11110:117;11266:2;11292:53;11337:7;11328:6;11317:9;11313:22;11292:53;:::i;:::-;11282:63;;11237:118;10888:474;;;;;:::o;11368:619::-;11445:6;11453;11461;11510:2;11498:9;11489:7;11485:23;11481:32;11478:119;;;11516:79;;:::i;:::-;11478:119;11636:1;11661:53;11706:7;11697:6;11686:9;11682:22;11661:53;:::i;:::-;11651:63;;11607:117;11763:2;11789:53;11834:7;11825:6;11814:9;11810:22;11789:53;:::i;:::-;11779:63;;11734:118;11891:2;11917:53;11962:7;11953:6;11942:9;11938:22;11917:53;:::i;:::-;11907:63;;11862:118;11368:619;;;;;:::o;11993:894::-;12111:6;12119;12168:2;12156:9;12147:7;12143:23;12139:32;12136:119;;;12174:79;;:::i;:::-;12136:119;12322:1;12311:9;12307:17;12294:31;12352:18;12344:6;12341:30;12338:117;;;12374:79;;:::i;:::-;12338:117;12479:78;12549:7;12540:6;12529:9;12525:22;12479:78;:::i;:::-;12469:88;;12265:302;12634:2;12623:9;12619:18;12606:32;12665:18;12657:6;12654:30;12651:117;;;12687:79;;:::i;:::-;12651:117;12792:78;12862:7;12853:6;12842:9;12838:22;12792:78;:::i;:::-;12782:88;;12577:303;11993:894;;;;;:::o;12893:1205::-;13039:6;13047;13055;13063;13112:3;13100:9;13091:7;13087:23;13083:33;13080:120;;;13119:79;;:::i;:::-;13080:120;13267:1;13256:9;13252:17;13239:31;13297:18;13289:6;13286:30;13283:117;;;13319:79;;:::i;:::-;13283:117;13424:78;13494:7;13485:6;13474:9;13470:22;13424:78;:::i;:::-;13414:88;;13210:302;13551:2;13577:53;13622:7;13613:6;13602:9;13598:22;13577:53;:::i;:::-;13567:63;;13522:118;13679:2;13705:53;13750:7;13741:6;13730:9;13726:22;13705:53;:::i;:::-;13695:63;;13650:118;13835:2;13824:9;13820:18;13807:32;13866:18;13858:6;13855:30;13852:117;;;13888:79;;:::i;:::-;13852:117;13993:88;14073:7;14064:6;14053:9;14049:22;13993:88;:::i;:::-;13983:98;;13778:313;12893:1205;;;;;;;:::o;14104:327::-;14162:6;14211:2;14199:9;14190:7;14186:23;14182:32;14179:119;;;14217:79;;:::i;:::-;14179:119;14337:1;14362:52;14406:7;14397:6;14386:9;14382:22;14362:52;:::i;:::-;14352:62;;14308:116;14104:327;;;;:::o;14437:349::-;14506:6;14555:2;14543:9;14534:7;14530:23;14526:32;14523:119;;;14561:79;;:::i;:::-;14523:119;14681:1;14706:63;14761:7;14752:6;14741:9;14737:22;14706:63;:::i;:::-;14696:73;;14652:127;14437:349;;;;:::o;14792:329::-;14851:6;14900:2;14888:9;14879:7;14875:23;14871:32;14868:119;;;14906:79;;:::i;:::-;14868:119;15026:1;15051:53;15096:7;15087:6;15076:9;15072:22;15051:53;:::i;:::-;15041:63;;14997:117;14792:329;;;;:::o;15127:474::-;15195:6;15203;15252:2;15240:9;15231:7;15227:23;15223:32;15220:119;;;15258:79;;:::i;:::-;15220:119;15378:1;15403:53;15448:7;15439:6;15428:9;15424:22;15403:53;:::i;:::-;15393:63;;15349:117;15505:2;15531:53;15576:7;15567:6;15556:9;15552:22;15531:53;:::i;:::-;15521:63;;15476:118;15127:474;;;;;:::o;15607:945::-;15703:6;15711;15719;15727;15776:3;15764:9;15755:7;15751:23;15747:33;15744:120;;;15783:79;;:::i;:::-;15744:120;15903:1;15928:53;15973:7;15964:6;15953:9;15949:22;15928:53;:::i;:::-;15918:63;;15874:117;16030:2;16056:53;16101:7;16092:6;16081:9;16077:22;16056:53;:::i;:::-;16046:63;;16001:118;16158:2;16184:53;16229:7;16220:6;16209:9;16205:22;16184:53;:::i;:::-;16174:63;;16129:118;16314:2;16303:9;16299:18;16286:32;16345:18;16337:6;16334:30;16331:117;;;16367:79;;:::i;:::-;16331:117;16472:63;16527:7;16518:6;16507:9;16503:22;16472:63;:::i;:::-;16462:73;;16257:288;15607:945;;;;;;;:::o;16558:179::-;16627:10;16648:46;16690:3;16682:6;16648:46;:::i;:::-;16726:4;16721:3;16717:14;16703:28;;16558:179;;;;:::o;16743:118::-;16830:24;16848:5;16830:24;:::i;:::-;16825:3;16818:37;16743:118;;:::o;16897:732::-;17016:3;17045:54;17093:5;17045:54;:::i;:::-;17115:86;17194:6;17189:3;17115:86;:::i;:::-;17108:93;;17225:56;17275:5;17225:56;:::i;:::-;17304:7;17335:1;17320:284;17345:6;17342:1;17339:13;17320:284;;;17421:6;17415:13;17448:63;17507:3;17492:13;17448:63;:::i;:::-;17441:70;;17534:60;17587:6;17534:60;:::i;:::-;17524:70;;17380:224;17367:1;17364;17360:9;17355:14;;17320:284;;;17324:14;17620:3;17613:10;;17021:608;;;16897:732;;;;:::o;17635:109::-;17716:21;17731:5;17716:21;:::i;:::-;17711:3;17704:34;17635:109;;:::o;17750:360::-;17836:3;17864:38;17896:5;17864:38;:::i;:::-;17918:70;17981:6;17976:3;17918:70;:::i;:::-;17911:77;;17997:52;18042:6;18037:3;18030:4;18023:5;18019:16;17997:52;:::i;:::-;18074:29;18096:6;18074:29;:::i;:::-;18069:3;18065:39;18058:46;;17840:270;17750:360;;;;:::o;18116:364::-;18204:3;18232:39;18265:5;18232:39;:::i;:::-;18287:71;18351:6;18346:3;18287:71;:::i;:::-;18280:78;;18367:52;18412:6;18407:3;18400:4;18393:5;18389:16;18367:52;:::i;:::-;18444:29;18466:6;18444:29;:::i;:::-;18439:3;18435:39;18428:46;;18208:272;18116:364;;;;:::o;18486:366::-;18628:3;18649:67;18713:2;18708:3;18649:67;:::i;:::-;18642:74;;18725:93;18814:3;18725:93;:::i;:::-;18843:2;18838:3;18834:12;18827:19;;18486:366;;;:::o;18858:::-;19000:3;19021:67;19085:2;19080:3;19021:67;:::i;:::-;19014:74;;19097:93;19186:3;19097:93;:::i;:::-;19215:2;19210:3;19206:12;19199:19;;18858:366;;;:::o;19230:::-;19372:3;19393:67;19457:2;19452:3;19393:67;:::i;:::-;19386:74;;19469:93;19558:3;19469:93;:::i;:::-;19587:2;19582:3;19578:12;19571:19;;19230:366;;;:::o;19602:::-;19744:3;19765:67;19829:2;19824:3;19765:67;:::i;:::-;19758:74;;19841:93;19930:3;19841:93;:::i;:::-;19959:2;19954:3;19950:12;19943:19;;19602:366;;;:::o;19974:::-;20116:3;20137:67;20201:2;20196:3;20137:67;:::i;:::-;20130:74;;20213:93;20302:3;20213:93;:::i;:::-;20331:2;20326:3;20322:12;20315:19;;19974:366;;;:::o;20346:::-;20488:3;20509:67;20573:2;20568:3;20509:67;:::i;:::-;20502:74;;20585:93;20674:3;20585:93;:::i;:::-;20703:2;20698:3;20694:12;20687:19;;20346:366;;;:::o;20718:::-;20860:3;20881:67;20945:2;20940:3;20881:67;:::i;:::-;20874:74;;20957:93;21046:3;20957:93;:::i;:::-;21075:2;21070:3;21066:12;21059:19;;20718:366;;;:::o;21090:::-;21232:3;21253:67;21317:2;21312:3;21253:67;:::i;:::-;21246:74;;21329:93;21418:3;21329:93;:::i;:::-;21447:2;21442:3;21438:12;21431:19;;21090:366;;;:::o;21462:::-;21604:3;21625:67;21689:2;21684:3;21625:67;:::i;:::-;21618:74;;21701:93;21790:3;21701:93;:::i;:::-;21819:2;21814:3;21810:12;21803:19;;21462:366;;;:::o;21834:::-;21976:3;21997:67;22061:2;22056:3;21997:67;:::i;:::-;21990:74;;22073:93;22162:3;22073:93;:::i;:::-;22191:2;22186:3;22182:12;22175:19;;21834:366;;;:::o;22206:::-;22348:3;22369:67;22433:2;22428:3;22369:67;:::i;:::-;22362:74;;22445:93;22534:3;22445:93;:::i;:::-;22563:2;22558:3;22554:12;22547:19;;22206:366;;;:::o;22578:::-;22720:3;22741:67;22805:2;22800:3;22741:67;:::i;:::-;22734:74;;22817:93;22906:3;22817:93;:::i;:::-;22935:2;22930:3;22926:12;22919:19;;22578:366;;;:::o;22950:::-;23092:3;23113:67;23177:2;23172:3;23113:67;:::i;:::-;23106:74;;23189:93;23278:3;23189:93;:::i;:::-;23307:2;23302:3;23298:12;23291:19;;22950:366;;;:::o;23322:::-;23464:3;23485:67;23549:2;23544:3;23485:67;:::i;:::-;23478:74;;23561:93;23650:3;23561:93;:::i;:::-;23679:2;23674:3;23670:12;23663:19;;23322:366;;;:::o;23694:::-;23836:3;23857:67;23921:2;23916:3;23857:67;:::i;:::-;23850:74;;23933:93;24022:3;23933:93;:::i;:::-;24051:2;24046:3;24042:12;24035:19;;23694:366;;;:::o;24066:::-;24208:3;24229:67;24293:2;24288:3;24229:67;:::i;:::-;24222:74;;24305:93;24394:3;24305:93;:::i;:::-;24423:2;24418:3;24414:12;24407:19;;24066:366;;;:::o;24438:::-;24580:3;24601:67;24665:2;24660:3;24601:67;:::i;:::-;24594:74;;24677:93;24766:3;24677:93;:::i;:::-;24795:2;24790:3;24786:12;24779:19;;24438:366;;;:::o;24810:::-;24952:3;24973:67;25037:2;25032:3;24973:67;:::i;:::-;24966:74;;25049:93;25138:3;25049:93;:::i;:::-;25167:2;25162:3;25158:12;25151:19;;24810:366;;;:::o;25182:::-;25324:3;25345:67;25409:2;25404:3;25345:67;:::i;:::-;25338:74;;25421:93;25510:3;25421:93;:::i;:::-;25539:2;25534:3;25530:12;25523:19;;25182:366;;;:::o;25554:::-;25696:3;25717:67;25781:2;25776:3;25717:67;:::i;:::-;25710:74;;25793:93;25882:3;25793:93;:::i;:::-;25911:2;25906:3;25902:12;25895:19;;25554:366;;;:::o;25926:::-;26068:3;26089:67;26153:2;26148:3;26089:67;:::i;:::-;26082:74;;26165:93;26254:3;26165:93;:::i;:::-;26283:2;26278:3;26274:12;26267:19;;25926:366;;;:::o;26298:::-;26440:3;26461:67;26525:2;26520:3;26461:67;:::i;:::-;26454:74;;26537:93;26626:3;26537:93;:::i;:::-;26655:2;26650:3;26646:12;26639:19;;26298:366;;;:::o;26670:::-;26812:3;26833:67;26897:2;26892:3;26833:67;:::i;:::-;26826:74;;26909:93;26998:3;26909:93;:::i;:::-;27027:2;27022:3;27018:12;27011:19;;26670:366;;;:::o;27042:108::-;27119:24;27137:5;27119:24;:::i;:::-;27114:3;27107:37;27042:108;;:::o;27156:118::-;27243:24;27261:5;27243:24;:::i;:::-;27238:3;27231:37;27156:118;;:::o;27280:222::-;27373:4;27411:2;27400:9;27396:18;27388:26;;27424:71;27492:1;27481:9;27477:17;27468:6;27424:71;:::i;:::-;27280:222;;;;:::o;27508:1053::-;27831:4;27869:3;27858:9;27854:19;27846:27;;27883:71;27951:1;27940:9;27936:17;27927:6;27883:71;:::i;:::-;27964:72;28032:2;28021:9;28017:18;28008:6;27964:72;:::i;:::-;28083:9;28077:4;28073:20;28068:2;28057:9;28053:18;28046:48;28111:108;28214:4;28205:6;28111:108;:::i;:::-;28103:116;;28266:9;28260:4;28256:20;28251:2;28240:9;28236:18;28229:48;28294:108;28397:4;28388:6;28294:108;:::i;:::-;28286:116;;28450:9;28444:4;28440:20;28434:3;28423:9;28419:19;28412:49;28478:76;28549:4;28540:6;28478:76;:::i;:::-;28470:84;;27508:1053;;;;;;;;:::o;28567:751::-;28790:4;28828:3;28817:9;28813:19;28805:27;;28842:71;28910:1;28899:9;28895:17;28886:6;28842:71;:::i;:::-;28923:72;28991:2;28980:9;28976:18;28967:6;28923:72;:::i;:::-;29005;29073:2;29062:9;29058:18;29049:6;29005:72;:::i;:::-;29087;29155:2;29144:9;29140:18;29131:6;29087:72;:::i;:::-;29207:9;29201:4;29197:20;29191:3;29180:9;29176:19;29169:49;29235:76;29306:4;29297:6;29235:76;:::i;:::-;29227:84;;28567:751;;;;;;;;:::o;29324:332::-;29445:4;29483:2;29472:9;29468:18;29460:26;;29496:71;29564:1;29553:9;29549:17;29540:6;29496:71;:::i;:::-;29577:72;29645:2;29634:9;29630:18;29621:6;29577:72;:::i;:::-;29324:332;;;;;:::o;29662:373::-;29805:4;29843:2;29832:9;29828:18;29820:26;;29892:9;29886:4;29882:20;29878:1;29867:9;29863:17;29856:47;29920:108;30023:4;30014:6;29920:108;:::i;:::-;29912:116;;29662:373;;;;:::o;30041:634::-;30262:4;30300:2;30289:9;30285:18;30277:26;;30349:9;30343:4;30339:20;30335:1;30324:9;30320:17;30313:47;30377:108;30480:4;30471:6;30377:108;:::i;:::-;30369:116;;30532:9;30526:4;30522:20;30517:2;30506:9;30502:18;30495:48;30560:108;30663:4;30654:6;30560:108;:::i;:::-;30552:116;;30041:634;;;;;:::o;30681:210::-;30768:4;30806:2;30795:9;30791:18;30783:26;;30819:65;30881:1;30870:9;30866:17;30857:6;30819:65;:::i;:::-;30681:210;;;;:::o;30897:313::-;31010:4;31048:2;31037:9;31033:18;31025:26;;31097:9;31091:4;31087:20;31083:1;31072:9;31068:17;31061:47;31125:78;31198:4;31189:6;31125:78;:::i;:::-;31117:86;;30897:313;;;;:::o;31216:419::-;31382:4;31420:2;31409:9;31405:18;31397:26;;31469:9;31463:4;31459:20;31455:1;31444:9;31440:17;31433:47;31497:131;31623:4;31497:131;:::i;:::-;31489:139;;31216:419;;;:::o;31641:::-;31807:4;31845:2;31834:9;31830:18;31822:26;;31894:9;31888:4;31884:20;31880:1;31869:9;31865:17;31858:47;31922:131;32048:4;31922:131;:::i;:::-;31914:139;;31641:419;;;:::o;32066:::-;32232:4;32270:2;32259:9;32255:18;32247:26;;32319:9;32313:4;32309:20;32305:1;32294:9;32290:17;32283:47;32347:131;32473:4;32347:131;:::i;:::-;32339:139;;32066:419;;;:::o;32491:::-;32657:4;32695:2;32684:9;32680:18;32672:26;;32744:9;32738:4;32734:20;32730:1;32719:9;32715:17;32708:47;32772:131;32898:4;32772:131;:::i;:::-;32764:139;;32491:419;;;:::o;32916:::-;33082:4;33120:2;33109:9;33105:18;33097:26;;33169:9;33163:4;33159:20;33155:1;33144:9;33140:17;33133:47;33197:131;33323:4;33197:131;:::i;:::-;33189:139;;32916:419;;;:::o;33341:::-;33507:4;33545:2;33534:9;33530:18;33522:26;;33594:9;33588:4;33584:20;33580:1;33569:9;33565:17;33558:47;33622:131;33748:4;33622:131;:::i;:::-;33614:139;;33341:419;;;:::o;33766:::-;33932:4;33970:2;33959:9;33955:18;33947:26;;34019:9;34013:4;34009:20;34005:1;33994:9;33990:17;33983:47;34047:131;34173:4;34047:131;:::i;:::-;34039:139;;33766:419;;;:::o;34191:::-;34357:4;34395:2;34384:9;34380:18;34372:26;;34444:9;34438:4;34434:20;34430:1;34419:9;34415:17;34408:47;34472:131;34598:4;34472:131;:::i;:::-;34464:139;;34191:419;;;:::o;34616:::-;34782:4;34820:2;34809:9;34805:18;34797:26;;34869:9;34863:4;34859:20;34855:1;34844:9;34840:17;34833:47;34897:131;35023:4;34897:131;:::i;:::-;34889:139;;34616:419;;;:::o;35041:::-;35207:4;35245:2;35234:9;35230:18;35222:26;;35294:9;35288:4;35284:20;35280:1;35269:9;35265:17;35258:47;35322:131;35448:4;35322:131;:::i;:::-;35314:139;;35041:419;;;:::o;35466:::-;35632:4;35670:2;35659:9;35655:18;35647:26;;35719:9;35713:4;35709:20;35705:1;35694:9;35690:17;35683:47;35747:131;35873:4;35747:131;:::i;:::-;35739:139;;35466:419;;;:::o;35891:::-;36057:4;36095:2;36084:9;36080:18;36072:26;;36144:9;36138:4;36134:20;36130:1;36119:9;36115:17;36108:47;36172:131;36298:4;36172:131;:::i;:::-;36164:139;;35891:419;;;:::o;36316:::-;36482:4;36520:2;36509:9;36505:18;36497:26;;36569:9;36563:4;36559:20;36555:1;36544:9;36540:17;36533:47;36597:131;36723:4;36597:131;:::i;:::-;36589:139;;36316:419;;;:::o;36741:::-;36907:4;36945:2;36934:9;36930:18;36922:26;;36994:9;36988:4;36984:20;36980:1;36969:9;36965:17;36958:47;37022:131;37148:4;37022:131;:::i;:::-;37014:139;;36741:419;;;:::o;37166:::-;37332:4;37370:2;37359:9;37355:18;37347:26;;37419:9;37413:4;37409:20;37405:1;37394:9;37390:17;37383:47;37447:131;37573:4;37447:131;:::i;:::-;37439:139;;37166:419;;;:::o;37591:::-;37757:4;37795:2;37784:9;37780:18;37772:26;;37844:9;37838:4;37834:20;37830:1;37819:9;37815:17;37808:47;37872:131;37998:4;37872:131;:::i;:::-;37864:139;;37591:419;;;:::o;38016:::-;38182:4;38220:2;38209:9;38205:18;38197:26;;38269:9;38263:4;38259:20;38255:1;38244:9;38240:17;38233:47;38297:131;38423:4;38297:131;:::i;:::-;38289:139;;38016:419;;;:::o;38441:::-;38607:4;38645:2;38634:9;38630:18;38622:26;;38694:9;38688:4;38684:20;38680:1;38669:9;38665:17;38658:47;38722:131;38848:4;38722:131;:::i;:::-;38714:139;;38441:419;;;:::o;38866:::-;39032:4;39070:2;39059:9;39055:18;39047:26;;39119:9;39113:4;39109:20;39105:1;39094:9;39090:17;39083:47;39147:131;39273:4;39147:131;:::i;:::-;39139:139;;38866:419;;;:::o;39291:::-;39457:4;39495:2;39484:9;39480:18;39472:26;;39544:9;39538:4;39534:20;39530:1;39519:9;39515:17;39508:47;39572:131;39698:4;39572:131;:::i;:::-;39564:139;;39291:419;;;:::o;39716:::-;39882:4;39920:2;39909:9;39905:18;39897:26;;39969:9;39963:4;39959:20;39955:1;39944:9;39940:17;39933:47;39997:131;40123:4;39997:131;:::i;:::-;39989:139;;39716:419;;;:::o;40141:::-;40307:4;40345:2;40334:9;40330:18;40322:26;;40394:9;40388:4;40384:20;40380:1;40369:9;40365:17;40358:47;40422:131;40548:4;40422:131;:::i;:::-;40414:139;;40141:419;;;:::o;40566:::-;40732:4;40770:2;40759:9;40755:18;40747:26;;40819:9;40813:4;40809:20;40805:1;40794:9;40790:17;40783:47;40847:131;40973:4;40847:131;:::i;:::-;40839:139;;40566:419;;;:::o;40991:222::-;41084:4;41122:2;41111:9;41107:18;41099:26;;41135:71;41203:1;41192:9;41188:17;41179:6;41135:71;:::i;:::-;40991:222;;;;:::o;41219:423::-;41360:4;41398:2;41387:9;41383:18;41375:26;;41411:71;41479:1;41468:9;41464:17;41455:6;41411:71;:::i;:::-;41529:9;41523:4;41519:20;41514:2;41503:9;41499:18;41492:48;41557:78;41630:4;41621:6;41557:78;:::i;:::-;41549:86;;41219:423;;;;;:::o;41648:332::-;41769:4;41807:2;41796:9;41792:18;41784:26;;41820:71;41888:1;41877:9;41873:17;41864:6;41820:71;:::i;:::-;41901:72;41969:2;41958:9;41954:18;41945:6;41901:72;:::i;:::-;41648:332;;;;;:::o;41986:129::-;42020:6;42047:20;;:::i;:::-;42037:30;;42076:33;42104:4;42096:6;42076:33;:::i;:::-;41986:129;;;:::o;42121:75::-;42154:6;42187:2;42181:9;42171:19;;42121:75;:::o;42202:311::-;42279:4;42369:18;42361:6;42358:30;42355:56;;;42391:18;;:::i;:::-;42355:56;42441:4;42433:6;42429:17;42421:25;;42501:4;42495;42491:15;42483:23;;42202:311;;;:::o;42519:321::-;42606:4;42696:18;42688:6;42685:30;42682:56;;;42718:18;;:::i;:::-;42682:56;42768:4;42760:6;42756:17;42748:25;;42828:4;42822;42818:15;42810:23;;42519:321;;;:::o;42846:311::-;42923:4;43013:18;43005:6;43002:30;42999:56;;;43035:18;;:::i;:::-;42999:56;43085:4;43077:6;43073:17;43065:25;;43145:4;43139;43135:15;43127:23;;42846:311;;;:::o;43163:307::-;43224:4;43314:18;43306:6;43303:30;43300:56;;;43336:18;;:::i;:::-;43300:56;43374:29;43396:6;43374:29;:::i;:::-;43366:37;;43458:4;43452;43448:15;43440:23;;43163:307;;;:::o;43476:308::-;43538:4;43628:18;43620:6;43617:30;43614:56;;;43650:18;;:::i;:::-;43614:56;43688:29;43710:6;43688:29;:::i;:::-;43680:37;;43772:4;43766;43762:15;43754:23;;43476:308;;;:::o;43790:132::-;43857:4;43880:3;43872:11;;43910:4;43905:3;43901:14;43893:22;;43790:132;;;:::o;43928:114::-;43995:6;44029:5;44023:12;44013:22;;43928:114;;;:::o;44048:98::-;44099:6;44133:5;44127:12;44117:22;;44048:98;;;:::o;44152:99::-;44204:6;44238:5;44232:12;44222:22;;44152:99;;;:::o;44257:113::-;44327:4;44359;44354:3;44350:14;44342:22;;44257:113;;;:::o;44376:184::-;44475:11;44509:6;44504:3;44497:19;44549:4;44544:3;44540:14;44525:29;;44376:184;;;;:::o;44566:168::-;44649:11;44683:6;44678:3;44671:19;44723:4;44718:3;44714:14;44699:29;;44566:168;;;;:::o;44740:169::-;44824:11;44858:6;44853:3;44846:19;44898:4;44893:3;44889:14;44874:29;;44740:169;;;;:::o;44915:305::-;44955:3;44974:20;44992:1;44974:20;:::i;:::-;44969:25;;45008:20;45026:1;45008:20;:::i;:::-;45003:25;;45162:1;45094:66;45090:74;45087:1;45084:81;45081:107;;;45168:18;;:::i;:::-;45081:107;45212:1;45209;45205:9;45198:16;;44915:305;;;;:::o;45226:185::-;45266:1;45283:20;45301:1;45283:20;:::i;:::-;45278:25;;45317:20;45335:1;45317:20;:::i;:::-;45312:25;;45356:1;45346:35;;45361:18;;:::i;:::-;45346:35;45403:1;45400;45396:9;45391:14;;45226:185;;;;:::o;45417:348::-;45457:7;45480:20;45498:1;45480:20;:::i;:::-;45475:25;;45514:20;45532:1;45514:20;:::i;:::-;45509:25;;45702:1;45634:66;45630:74;45627:1;45624:81;45619:1;45612:9;45605:17;45601:105;45598:131;;;45709:18;;:::i;:::-;45598:131;45757:1;45754;45750:9;45739:20;;45417:348;;;;:::o;45771:191::-;45811:4;45831:20;45849:1;45831:20;:::i;:::-;45826:25;;45865:20;45883:1;45865:20;:::i;:::-;45860:25;;45904:1;45901;45898:8;45895:34;;;45909:18;;:::i;:::-;45895:34;45954:1;45951;45947:9;45939:17;;45771:191;;;;:::o;45968:96::-;46005:7;46034:24;46052:5;46034:24;:::i;:::-;46023:35;;45968:96;;;:::o;46070:90::-;46104:7;46147:5;46140:13;46133:21;46122:32;;46070:90;;;:::o;46166:149::-;46202:7;46242:66;46235:5;46231:78;46220:89;;46166:149;;;:::o;46321:126::-;46358:7;46398:42;46391:5;46387:54;46376:65;;46321:126;;;:::o;46453:77::-;46490:7;46519:5;46508:16;;46453:77;;;:::o;46536:154::-;46620:6;46615:3;46610;46597:30;46682:1;46673:6;46668:3;46664:16;46657:27;46536:154;;;:::o;46696:307::-;46764:1;46774:113;46788:6;46785:1;46782:13;46774:113;;;46873:1;46868:3;46864:11;46858:18;46854:1;46849:3;46845:11;46838:39;46810:2;46807:1;46803:10;46798:15;;46774:113;;;46905:6;46902:1;46899:13;46896:101;;;46985:1;46976:6;46971:3;46967:16;46960:27;46896:101;46745:258;46696:307;;;:::o;47009:320::-;47053:6;47090:1;47084:4;47080:12;47070:22;;47137:1;47131:4;47127:12;47158:18;47148:81;;47214:4;47206:6;47202:17;47192:27;;47148:81;47276:2;47268:6;47265:14;47245:18;47242:38;47239:84;;;47295:18;;:::i;:::-;47239:84;47060:269;47009:320;;;:::o;47335:281::-;47418:27;47440:4;47418:27;:::i;:::-;47410:6;47406:40;47548:6;47536:10;47533:22;47512:18;47500:10;47497:34;47494:62;47491:88;;;47559:18;;:::i;:::-;47491:88;47599:10;47595:2;47588:22;47378:238;47335:281;;:::o;47622:233::-;47661:3;47684:24;47702:5;47684:24;:::i;:::-;47675:33;;47730:66;47723:5;47720:77;47717:103;;;47800:18;;:::i;:::-;47717:103;47847:1;47840:5;47836:13;47829:20;;47622:233;;;:::o;47861:176::-;47893:1;47910:20;47928:1;47910:20;:::i;:::-;47905:25;;47944:20;47962:1;47944:20;:::i;:::-;47939:25;;47983:1;47973:35;;47988:18;;:::i;:::-;47973:35;48029:1;48026;48022:9;48017:14;;47861:176;;;;:::o;48043:180::-;48091:77;48088:1;48081:88;48188:4;48185:1;48178:15;48212:4;48209:1;48202:15;48229:180;48277:77;48274:1;48267:88;48374:4;48371:1;48364:15;48398:4;48395:1;48388:15;48415:180;48463:77;48460:1;48453:88;48560:4;48557:1;48550:15;48584:4;48581:1;48574:15;48601:180;48649:77;48646:1;48639:88;48746:4;48743:1;48736:15;48770:4;48767:1;48760:15;48787:180;48835:77;48832:1;48825:88;48932:4;48929:1;48922:15;48956:4;48953:1;48946:15;48973:183;49008:3;49046:1;49028:16;49025:23;49022:128;;;49084:1;49081;49078;49063:23;49106:34;49137:1;49131:8;49106:34;:::i;:::-;49099:41;;49022:128;48973:183;:::o;49162:117::-;49271:1;49268;49261:12;49285:117;49394:1;49391;49384:12;49408:117;49517:1;49514;49507:12;49531:117;49640:1;49637;49630:12;49654:117;49763:1;49760;49753:12;49777:102;49818:6;49869:2;49865:7;49860:2;49853:5;49849:14;49845:28;49835:38;;49777:102;;;:::o;49885:106::-;49929:8;49978:5;49973:3;49969:15;49948:36;;49885:106;;;:::o;49997:239::-;50137:34;50133:1;50125:6;50121:14;50114:58;50206:22;50201:2;50193:6;50189:15;50182:47;49997:239;:::o;50242:227::-;50382:34;50378:1;50370:6;50366:14;50359:58;50451:10;50446:2;50438:6;50434:15;50427:35;50242:227;:::o;50475:170::-;50615:22;50611:1;50603:6;50599:14;50592:46;50475:170;:::o;50651:165::-;50791:17;50787:1;50779:6;50775:14;50768:41;50651:165;:::o;50822:176::-;50962:28;50958:1;50950:6;50946:14;50939:52;50822:176;:::o;51004:230::-;51144:34;51140:1;51132:6;51128:14;51121:58;51213:13;51208:2;51200:6;51196:15;51189:38;51004:230;:::o;51240:225::-;51380:34;51376:1;51368:6;51364:14;51357:58;51449:8;51444:2;51436:6;51432:15;51425:33;51240:225;:::o;51471:223::-;51611:34;51607:1;51599:6;51595:14;51588:58;51680:6;51675:2;51667:6;51663:15;51656:31;51471:223;:::o;51700:220::-;51840:34;51836:1;51828:6;51824:14;51817:58;51909:3;51904:2;51896:6;51892:15;51885:28;51700:220;:::o;51926:231::-;52066:34;52062:1;52054:6;52050:14;52043:58;52135:14;52130:2;52122:6;52118:15;52111:39;51926:231;:::o;52163:228::-;52303:34;52299:1;52291:6;52287:14;52280:58;52372:11;52367:2;52359:6;52355:15;52348:36;52163:228;:::o;52397:166::-;52537:18;52533:1;52525:6;52521:14;52514:42;52397:166;:::o;52569:224::-;52709:34;52705:1;52697:6;52693:14;52686:58;52778:7;52773:2;52765:6;52761:15;52754:32;52569:224;:::o;52799:237::-;52939:34;52935:1;52927:6;52923:14;52916:58;53008:20;53003:2;52995:6;52991:15;52984:45;52799:237;:::o;53042:222::-;53182:34;53178:1;53170:6;53166:14;53159:58;53251:5;53246:2;53238:6;53234:15;53227:30;53042:222;:::o;53270:229::-;53410:34;53406:1;53398:6;53394:14;53387:58;53479:12;53474:2;53466:6;53462:15;53455:37;53270:229;:::o;53505:182::-;53645:34;53641:1;53633:6;53629:14;53622:58;53505:182;:::o;53693:223::-;53833:34;53829:1;53821:6;53817:14;53810:58;53902:6;53897:2;53889:6;53885:15;53878:31;53693:223;:::o;53922:228::-;54062:34;54058:1;54050:6;54046:14;54039:58;54131:11;54126:2;54118:6;54114:15;54107:36;53922:228;:::o;54156:::-;54296:34;54292:1;54284:6;54280:14;54273:58;54365:11;54360:2;54352:6;54348:15;54341:36;54156:228;:::o;54390:227::-;54530:34;54526:1;54518:6;54514:14;54507:58;54599:10;54594:2;54586:6;54582:15;54575:35;54390:227;:::o;54623:220::-;54763:34;54759:1;54751:6;54747:14;54740:58;54832:3;54827:2;54819:6;54815:15;54808:28;54623:220;:::o;54849:221::-;54989:34;54985:1;54977:6;54973:14;54966:58;55058:4;55053:2;55045:6;55041:15;55034:29;54849:221;:::o;55076:711::-;55115:3;55153:4;55135:16;55132:26;55129:39;;;55161:5;;55129:39;55190:20;;:::i;:::-;55265:1;55247:16;55243:24;55240:1;55234:4;55219:49;55298:4;55292:11;55397:16;55390:4;55382:6;55378:17;55375:39;55342:18;55334:6;55331:30;55315:113;55312:146;;;55443:5;;;;55312:146;55489:6;55483:4;55479:17;55525:3;55519:10;55552:18;55544:6;55541:30;55538:43;;;55574:5;;;;;;55538:43;55622:6;55615:4;55610:3;55606:14;55602:27;55681:1;55663:16;55659:24;55653:4;55649:35;55644:3;55641:44;55638:57;;;55688:5;;;;;;;55638:57;55705;55753:6;55747:4;55743:17;55735:6;55731:30;55725:4;55705:57;:::i;:::-;55778:3;55771:10;;55119:668;;;;;55076:711;;:::o;55793:122::-;55866:24;55884:5;55866:24;:::i;:::-;55859:5;55856:35;55846:63;;55905:1;55902;55895:12;55846:63;55793:122;:::o;55921:116::-;55991:21;56006:5;55991:21;:::i;:::-;55984:5;55981:32;55971:60;;56027:1;56024;56017:12;55971:60;55921:116;:::o;56043:120::-;56115:23;56132:5;56115:23;:::i;:::-;56108:5;56105:34;56095:62;;56153:1;56150;56143:12;56095:62;56043:120;:::o;56169:122::-;56242:24;56260:5;56242:24;:::i;:::-;56235:5;56232:35;56222:63;;56281:1;56278;56271:12;56222:63;56169:122;:::o
Swarm Source
ipfs://08c0ccd0d00b4dd4db3e4ac96aa3f56d5a72aed74e2543f6f0f30c0cd1c493e4