Overview
ETH Balance
0.004 ETH
Eth Value
$13.08 (@ $3,270.30/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 89 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Auction | 13324118 | 1198 days ago | IN | 0 ETH | 0.00573746 | ||||
Create Auction | 13324115 | 1198 days ago | IN | 0 ETH | 0.00597826 | ||||
Cancel Auction | 13324092 | 1198 days ago | IN | 0 ETH | 0.00187902 | ||||
Cancel Auction | 13324092 | 1198 days ago | IN | 0 ETH | 0.00187902 | ||||
Create Auction | 13323998 | 1198 days ago | IN | 0 ETH | 0.00676577 | ||||
Cancel Auction | 13323992 | 1198 days ago | IN | 0 ETH | 0.00328289 | ||||
Create Auction | 13323991 | 1198 days ago | IN | 0 ETH | 0.00650712 | ||||
Cancel Auction | 13323983 | 1198 days ago | IN | 0 ETH | 0.00323557 | ||||
Mint | 13279558 | 1205 days ago | IN | 0 ETH | 0.01812651 | ||||
Create Auction | 13227180 | 1213 days ago | IN | 0 ETH | 0.00290383 | ||||
Create Auction | 13227179 | 1213 days ago | IN | 0 ETH | 0.00259527 | ||||
Cancel Auction | 13227177 | 1213 days ago | IN | 0 ETH | 0.001273 | ||||
Cancel Auction | 13227169 | 1213 days ago | IN | 0 ETH | 0.00147539 | ||||
Create Auction | 13182008 | 1220 days ago | IN | 0 ETH | 0.00663388 | ||||
Create Auction | 13182005 | 1220 days ago | IN | 0 ETH | 0.00739912 | ||||
Create Auction | 13182002 | 1220 days ago | IN | 0 ETH | 0.00816212 | ||||
Auction Mint | 13035950 | 1243 days ago | IN | 0 ETH | 0.01316092 | ||||
Auction Mint | 12970158 | 1253 days ago | IN | 0 ETH | 0.01050888 | ||||
Mint | 12950165 | 1256 days ago | IN | 0 ETH | 0.01074431 | ||||
Transfer From | 12943154 | 1257 days ago | IN | 0 ETH | 0.00153761 | ||||
Update Sale | 12943139 | 1257 days ago | IN | 0 ETH | 0.00143076 | ||||
Buy | 12942857 | 1257 days ago | IN | 0.001 ETH | 0.00309573 | ||||
End Auction | 12919174 | 1261 days ago | IN | 0 ETH | 0.00168222 | ||||
Create Auction | 12917569 | 1261 days ago | IN | 0 ETH | 0.00157899 | ||||
Cancel Auction | 12917560 | 1261 days ago | IN | 0 ETH | 0.00045144 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12942857 | 1257 days ago | 0.00002 ETH | ||||
12942857 | 1257 days ago | 0.00098 ETH | ||||
12919174 | 1261 days ago | 0.00002 ETH | ||||
12919174 | 1261 days ago | 0.00098 ETH | ||||
12913260 | 1262 days ago | 0.00209999 ETH | ||||
12913183 | 1262 days ago | 0.00002 ETH | ||||
12913183 | 1262 days ago | 0.00098 ETH | ||||
12913118 | 1262 days ago | 0.002 ETH | ||||
12911837 | 1262 days ago | 0.001 ETH | ||||
12880455 | 1267 days ago | 0.002 ETH | ||||
12880218 | 1267 days ago | 0.001 ETH | ||||
12829330 | 1275 days ago | 0.00002 ETH | ||||
12829330 | 1275 days ago | 0.00098 ETH | ||||
12824514 | 1276 days ago | 0.00002 ETH | ||||
12824514 | 1276 days ago | 0.00098 ETH | ||||
12823221 | 1276 days ago | 0.00006 ETH | ||||
12823221 | 1276 days ago | 0.00294 ETH | ||||
12805069 | 1279 days ago | 0.00002 ETH | ||||
12805069 | 1279 days ago | 0.00098 ETH | ||||
12792121 | 1281 days ago | 0.000004 ETH | ||||
12792121 | 1281 days ago | 0.000196 ETH | ||||
12779195 | 1283 days ago | 0.0000035 ETH | ||||
12779195 | 1283 days ago | 0.0000965 ETH | ||||
12779010 | 1283 days ago | 0.00002 ETH | ||||
12779010 | 1283 days ago | 0.00098 ETH |
Loading...
Loading
Contract Name:
AuctionMarket
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-14 */ pragma solidity >=0.6.0 <0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable { address internal _owner; event OwnershipTransferred( address indexed currentOwner, address indexed newOwner ); constructor() { _owner = msg.sender; emit OwnershipTransferred(address(0), msg.sender); } modifier onlyOwner() { require( msg.sender == _owner, "Ownable : Function called by unauthorized user." ); _; } function owner() external view returns (address ownerAddress) { ownerAddress = _owner; } function transferOwnership(address newOwner) public onlyOwner returns (bool success) { require(newOwner != address(0), "Ownable/transferOwnership : cannot transfer ownership to zero address"); success = _transferOwnership(newOwner); } function renounceOwnership() external onlyOwner returns (bool success) { success = _transferOwnership(address(0)); } function _transferOwnership(address newOwner) internal returns (bool success) { emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; success = true; } } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom(address from, address to, uint256 tokenId) external; function transferFrom(address from, address to, uint256 tokenId) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } interface IERC721Receiver { function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } abstract contract ERC165 is IERC165 { bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; mapping(bytes4 => bool) private _supportedInterfaces; constructor () internal { _registerInterface(_INTERFACE_ID_ERC165); } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return _supportedInterfaces[interfaceId]; } function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } library EnumerableMap { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Map type with // bytes32 keys and values. // The Map implementation uses private functions, and user-facing // implementations (such as Uint256ToAddressMap) are just wrappers around // the underlying Map. // This means that we can only create new EnumerableMaps for types that fit // in bytes32. struct MapEntry { bytes32 _key; bytes32 _value; } struct Map { // Storage of map keys and values MapEntry[] _entries; // Position of the entry defined by a key in the `entries` array, plus 1 // because index 0 means a key is not in the map. mapping (bytes32 => uint256) _indexes; } /** * @dev Adds a key-value pair to a map, or updates the value for an existing * key. O(1). * * Returns true if the key was added to the map, that is if it was not * already present. */ function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) { // We read and store the key's index to prevent multiple reads from the same storage slot uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) { // Equivalent to !contains(map, key) map._entries.push(MapEntry({ _key: key, _value: value })); // The entry is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value map._indexes[key] = map._entries.length; return true; } else { map._entries[keyIndex - 1]._value = value; return false; } } /** * @dev Removes a key-value pair from a map. O(1). * * Returns true if the key was removed from the map, that is if it was present. */ function _remove(Map storage map, bytes32 key) private returns (bool) { // We read and store the key's index to prevent multiple reads from the same storage slot uint256 keyIndex = map._indexes[key]; if (keyIndex != 0) { // Equivalent to contains(map, key) // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one // in the array, and then remove the last entry (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = keyIndex - 1; uint256 lastIndex = map._entries.length - 1; // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. MapEntry storage lastEntry = map._entries[lastIndex]; // Move the last entry to the index where the entry to delete is map._entries[toDeleteIndex] = lastEntry; // Update the index for the moved entry map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved entry was stored map._entries.pop(); // Delete the index for the deleted slot delete map._indexes[key]; return true; } else { return false; } } /** * @dev Returns true if the key is in the map. O(1). */ function _contains(Map storage map, bytes32 key) private view returns (bool) { return map._indexes[key] != 0; } /** * @dev Returns the number of key-value pairs in the map. O(1). */ function _length(Map storage map) private view returns (uint256) { return map._entries.length; } /** * @dev Returns the key-value pair stored at position `index` in the map. O(1). * * Note that there are no guarantees on the ordering of entries inside the * array, and it may change when more entries are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) { require(map._entries.length > index, "EnumerableMap: index out of bounds"); MapEntry storage entry = map._entries[index]; return (entry._key, entry._value); } /** * @dev Tries to returns the value associated with `key`. O(1). * Does not revert if `key` is not in the map. */ function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) { uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key) return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based } /** * @dev Returns the value associated with `key`. O(1). * * Requirements: * * - `key` must be in the map. */ function _get(Map storage map, bytes32 key) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } /** * @dev Same as {_get}, with a custom error message when `key` is not in the map. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {_tryGet}. */ function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } // UintToAddressMap struct UintToAddressMap { Map _inner; } /** * @dev Adds a key-value pair to a map, or updates the value for an existing * key. O(1). * * Returns true if the key was added to the map, that is if it was not * already present. */ function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) { return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the key was removed from the map, that is if it was present. */ function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) { return _remove(map._inner, bytes32(key)); } /** * @dev Returns true if the key is in the map. O(1). */ function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) { return _contains(map._inner, bytes32(key)); } /** * @dev Returns the number of elements in the map. O(1). */ function length(UintToAddressMap storage map) internal view returns (uint256) { return _length(map._inner); } /** * @dev Returns the element stored at position `index` in the set. O(1). * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) { (bytes32 key, bytes32 value) = _at(map._inner, index); return (uint256(key), address(uint160(uint256(value)))); } /** * @dev Tries to returns the value associated with `key`. O(1). * Does not revert if `key` is not in the map. * * _Available since v3.4._ */ function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) { (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key)); return (success, address(uint160(uint256(value)))); } /** * @dev Returns the value associated with `key`. O(1). * * Requirements: * * - `key` must be in the map. */ function get(UintToAddressMap storage map, uint256 key) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key))))); } /** * @dev Same as {get}, with a custom error message when `key` is not in the map. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryGet}. */ function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage)))); } } library Strings { /** * @dev Converts a `uint256` to its ASCII `string` representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); uint256 index = digits - 1; temp = value; while (temp != 0) { buffer[index--] = bytes1(uint8(48 + temp % 10)); temp /= 10; } return string(buffer); } } abstract contract ERC721Pausable is Context,Ownable { event Paused(address account); event Unpaused(address account); bool private _paused; constructor () { _paused = false; } function paused() public view virtual returns (bool) { return _paused; } modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } function pause() onlyOwner whenNotPaused public { _paused = true; emit Paused(_msgSender()); } function unpause() onlyOwner whenPaused public { _paused = false; emit Unpaused(_msgSender()); } } abstract contract ERC721Fees is Context,Ownable { event FeePaused(); event FeeUnPaused(); event CancelFeePaused(); event CancelFeeUnPaused(); uint private _feeRate; uint private _cancelFeeRate; bool private _feePaused; bool private _cancelFeePaused; constructor (uint feeRate_,uint cancelFeeRate_) { _feeRate = feeRate_; _cancelFeeRate = cancelFeeRate_; _feePaused = false; _cancelFeePaused = false; } function feeRate() public view virtual returns (uint) { if(feePaused() == true){ return 0; } return _feeRate; } function cancelFeeRate() public view virtual returns (uint) { if(cancelFeePaused() == true){ return 0; } return _cancelFeeRate; } function feePaused() public view virtual returns (bool) { return _feePaused; } function cancelFeePaused() public view virtual returns (bool) { return _cancelFeePaused; } modifier whenNotFeePaused() { require(!feePaused(), "Pausable: paused"); _; } modifier whenFeePaused() { require(feePaused(), "Pausable: not paused"); _; } modifier whenNotCancelFeePaused() { require(!cancelFeePaused(), "Pausable: paused"); _; } modifier whenCancelFeePaused() { require(cancelFeePaused(), "Pausable: not paused"); _; } function feePause() onlyOwner whenNotFeePaused public { _feePaused = true; emit FeePaused(); } function feeUnPause() onlyOwner whenFeePaused public { _feePaused = false; emit FeeUnPaused(); } function cancelFeePause() onlyOwner whenNotCancelFeePaused public { _cancelFeePaused = true; emit CancelFeePaused(); } function cancelFeeUnPause() onlyOwner whenCancelFeePaused public { _cancelFeePaused = false; emit CancelFeeUnPaused(); } } abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable ,ERC721Pausable ,ERC721Fees { using SafeMath for uint256; using Address for address; using EnumerableSet for EnumerableSet.UintSet; using Strings for uint256; using EnumerableMap for EnumerableMap.UintToAddressMap; EnumerableMap.UintToAddressMap internal _tokenOwners; bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; mapping (address => EnumerableSet.UintSet) internal _holderTokens; mapping (uint256 => address) private _tokenApprovals; mapping (address => mapping (address => bool)) internal _operatorApprovals; mapping (uint256 => string) internal _tokenURIs; string internal _baseURI; string private _name; string private _symbol; bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; constructor (string memory name_, string memory symbol_) ERC721Fees(20,35) { _name = name_; _symbol = symbol_; _registerInterface(_INTERFACE_ID_ERC721); _registerInterface(_INTERFACE_ID_ERC721_METADATA); _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } function _ownerOf(uint256 tokenId) internal view virtual returns (address) { return _tokenOwners.get(tokenId); } function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data)); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _tokenOwners.contains(tokenId); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId)); address owner = _ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || _operatorApprovals[owner][spender]); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data)); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0)); require(!_exists(tokenId)); _beforeTokenTransfer(address(0), to, tokenId); _holderTokens[to].add(tokenId); _tokenOwners.set(tokenId, to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = _ownerOf(tokenId); // internal owner _beforeTokenTransfer(owner, address(0), tokenId); _approve(address(0), tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } _holderTokens[owner].remove(tokenId); _tokenOwners.remove(tokenId); emit Transfer(owner, address(0), tokenId); } function _transfer(address from, address to, uint256 tokenId) internal virtual { require(_ownerOf(tokenId) == from); require(to != address(0)); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _holderTokens[from].remove(tokenId); _holderTokens[to].add(tokenId); _tokenOwners.set(tokenId, to); emit Transfer(from, to, tokenId); } function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId)); _tokenURIs[tokenId] = _tokenURI; } function _setBaseURI(string memory baseURI_) internal virtual { _baseURI = baseURI_; } function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (!to.isContract()) { return true; } bytes memory returndata = to.functionCall(abi.encodeWithSelector( IERC721Receiver(to).onERC721Received.selector, _msgSender(), from, tokenId, _data ), "ERC721: transfer to non ERC721Receiver implementer"); bytes4 retval = abi.decode(returndata, (bytes4)); return (retval == _ERC721_RECEIVED); } function _approve(address to, uint256 tokenId) internal { _tokenApprovals[tokenId] = to; emit Approval(_ownerOf(tokenId), to, tokenId); // internal owner } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { require(!paused()); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId)); return _tokenApprovals[tokenId]; } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0)); return _holderTokens[owner].length(); } function setBaseURI(string memory baseURI_) public virtual { _setBaseURI(baseURI_); } function baseURI() public view virtual returns (string memory) { return _baseURI; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId)); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI. return string(abi.encodePacked(base, tokenId.toString())); } function totalSupply() public view virtual override returns (uint256) { return _tokenOwners.length(); } function tokenByIndex(uint256 index) public view virtual override returns (uint256) { (uint256 tokenId, ) = _tokenOwners.at(index); return tokenId; } function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { return _holderTokens[owner].at(index); } function ownerOf(uint256 tokenId) public view virtual override returns (address) { return _ownerOf(tokenId); } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function approve(address to, uint256 tokenId) public virtual override { address owner = ownerOf(tokenId); require(to != owner); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender())); _approve(to, tokenId); } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender()); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId)); require(hasAuction(tokenId) == false); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { require(hasAuction(tokenId) == false); safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId)); require(hasAuction(tokenId) == false); _safeTransfer(from, to, tokenId, _data); } struct Offer { bool isForSale; address seller; uint minValue; uint endTime; } struct Bid { bool hasBid; address bidder; uint value; } // NFT 경매 등록 목록 mapping (uint256 => Offer) public offers; // NFT 입찰 목록 mapping (uint256 => Bid) public bids; event CreateAuction(address indexed owner,uint _tokenId, uint _minValue,uint _endTime); event CancelAuction(uint _tokenId); event EndAuction(uint _tokenId,uint price); event Bidding(uint _tokenId,uint value); event CancelBid(uint _tokenId); //경매등록 function _createAuction(uint256 _tokenId, uint _minValue,uint _auctionTime) internal virtual { require(_ownerOf(_tokenId) == msg.sender);//토큰 소유자인지 확인 Offer storage offer = offers[_tokenId]; require(offer.isForSale != true);//현재 판매중인지 확인 offers[_tokenId] = Offer(true, msg.sender, _minValue,block.timestamp + _auctionTime); emit CreateAuction(msg.sender, _tokenId, _minValue,block.timestamp + _auctionTime); } //경매취소 function _cancelAuction(uint256 _tokenId) internal virtual { require(_ownerOf(_tokenId) == msg.sender);//토큰 소유자인지 체크 Offer storage offer = offers[_tokenId]; require(offer.isForSale == true);//현재 경매중인지 체크 Bid storage bid = bids[_tokenId]; require(bid.hasBid != true);//입찰자가 있을경우 경매 취소 불가능 offers[_tokenId] = Offer(false, msg.sender, 0,0); emit CancelAuction(_tokenId); } //입찰하기 function _bid(uint256 _tokenId) internal virtual { require(_ownerOf(_tokenId) != msg.sender);//토큰 보유자 Offer storage offer = offers[_tokenId]; require(block.timestamp < offer.endTime);//경매가 종료되었을 경우 require(msg.value >= offer.minValue);//입찰 금액이 최소 입찰액보다 작은지 체크 Bid storage existing = bids[_tokenId]; require(msg.value > existing.value);//입찰금액이 이전 입찰금액보다 적을경우 트랜잭션 취소 if (existing.value > 0) { //이전 입찰자에게 이더리움을 돌려줌 address payable bidder = payable(existing.bidder); bidder.transfer(existing.value); } bids[_tokenId] = Bid(true, msg.sender, msg.value); emit Bidding(_tokenId,msg.value); } //입찰취소 function _cancelBid(uint256 _tokenId) internal virtual { Offer storage offer = offers[_tokenId]; require(offer.isForSale == true);//경매가 진행중인지 체크 require(block.timestamp < offer.endTime);//경매가 종료되었을 경우 Bid storage bid = bids[_tokenId]; require(bid.hasBid == true); require(bid.bidder == msg.sender);//입찰자가 본인인 경우 address payable bidder = payable(bid.bidder); address payable seller = payable(offer.seller); uint cancelFee = bid.value * cancelFeeRate() / 1000; bidder.transfer(bid.value - cancelFee); seller.transfer(cancelFee); bids[_tokenId] = Bid(false, address(0), 0); emit CancelBid(_tokenId); } //경매종료 function _endAuction(uint256 _tokenId) internal virtual { Offer storage offer = offers[_tokenId]; require(block.timestamp >= offer.endTime);//경매 종료 시간이 아닐경우 오류 require(offer.isForSale == true);//경매가 이미 종료된 경우 address payable seller = payable(_ownerOf(_tokenId)); Bid storage bid = bids[_tokenId]; _transfer(offer.seller, bid.bidder, _tokenId); // 수수료 uint _commissionValue = bid.value * feeRate() / 1000; uint _sellerValue = bid.value - _commissionValue; seller.transfer(_sellerValue);//판매자에게 판매대금 지급 address payable contractOwner = payable(_owner); contractOwner.transfer(_commissionValue);//발행자에게 수수료 지급 emit EndAuction(_tokenId,bid.value); _resetAuction(_tokenId); } function _resetAuction(uint256 _tokenId) internal virtual { offers[_tokenId] = Offer(false, address(0), 0,0); bids[_tokenId] = Bid(false, address(0), 0); } function hasAuction(uint256 _tokenId) public view virtual returns (bool){ Offer storage offer = offers[_tokenId]; if(offer.isForSale != true){ return false; } return true; } } abstract contract ERC721Burnable is ERC721 { function burn(uint256 _tokenId) external payable{ require(_isApprovedOrOwner(_msgSender(), _tokenId) || _owner == _msgSender(), "ERC721Burnable: caller is not owner nor approved"); Offer storage offer = offers[_tokenId]; if(offer.isForSale == true){ Bid storage bid = bids[_tokenId]; if(bid.hasBid == true){ address payable bidder = payable(bid.bidder); bidder.transfer(bid.value); } _resetAuction(_tokenId); } _burn(_tokenId); } } abstract contract Market is ERC721Burnable { address payable public _contractOwner; mapping (uint => uint) public price; mapping (uint => bool) public listedMap; event Purchase(address indexed previousOwner, address indexed newOwner, uint price, uint nftID, string uri); event Minted(address indexed minter, uint256 price, uint nftID, string uri); event PriceUpdate(address indexed owner, uint oldPrice, uint newPrice, uint nftID); event NftListStatus(address indexed owner, uint nftID, bool isListed); //즉시 판매 생성 function mint(string memory _tokenURI, address _toAddress, uint256 _price) public returns (uint) { uint _tokenId = totalSupply() + 1; price[_tokenId] = _price; listedMap[_tokenId] = true; _safeMint(_toAddress, _tokenId); _setTokenURI(_tokenId, _tokenURI); emit Minted(_toAddress, _price, _tokenId, _tokenURI); return _tokenId; } function buy(uint _id) external payable { _validate(_id); address _previousOwner = ownerOf(_id); address _newOwner = msg.sender; _trade(_id); emit Purchase(_previousOwner, _newOwner, price[_id], _id, tokenURI(_id)); } function _validate(uint _id) internal { bool isItemListed = listedMap[_id]; require(_exists(_id)); require(isItemListed); require(msg.value >= price[_id]); require(msg.sender != ownerOf(_id)); } function _trade(uint _id) internal { address payable contractOwner = payable(_owner); address payable _buyer = payable(msg.sender); address payable _owner = payable(ownerOf(_id)); _transfer(_owner, _buyer, _id); uint _commissionValue = price[_id] * feeRate() / 1000; uint _sellerValue = price[_id] - _commissionValue; _owner.transfer(_sellerValue); contractOwner.transfer(_commissionValue); // If buyer sent more than price, we send them back their rest of funds if (msg.value > price[_id]) { _buyer.transfer(msg.value - price[_id]); } listedMap[_id] = false; } function updatePrice(uint _tokenId, uint _price) public returns (bool) { require(hasAuction(_tokenId) == false); uint oldPrice = price[_tokenId]; require(msg.sender == ownerOf(_tokenId)); price[_tokenId] = _price; emit PriceUpdate(msg.sender, oldPrice, _price, _tokenId); return true; } function updateListingStatus(uint _tokenId, bool shouldBeListed) public returns (bool) { require(msg.sender == ownerOf(_tokenId)); require(hasAuction(_tokenId) == false); listedMap[_tokenId] = shouldBeListed; emit NftListStatus(msg.sender, _tokenId, shouldBeListed); return true; } function updateSale(uint256 _tokenId, uint256 _price) public returns (bool) { require(hasAuction(_tokenId) == false); uint oldPrice = price[_tokenId]; require(msg.sender == ownerOf(_tokenId)); price[_tokenId] = _price; emit NftListStatus(msg.sender, _tokenId, true); if (listedMap[_tokenId] != true) { listedMap[_tokenId] = true; emit PriceUpdate(msg.sender, oldPrice, _price, _tokenId); } return true; } } contract AuctionMarket is Market { constructor() ERC721("BLOCKSDK", "BLOCKSDK") { } //경매 판매 생성 function auctionMint(string memory _tokenURI, address _toAddress,uint _minValue,uint _auctionTime) public returns (uint) { uint _tokenId = totalSupply() + 1; price[_tokenId] = _minValue; _safeMint(_toAddress, _tokenId); _setTokenURI(_tokenId, _tokenURI); emit Minted(_toAddress, _minValue, _tokenId, _tokenURI); _createAuction(_tokenId,_minValue,_auctionTime); return _tokenId; } //경매생성 function createAuction(uint _tokenId, uint _minValue,uint _auctionTime) public virtual { require(listedMap[_tokenId] == false); // 즉시판매 진행중 _createAuction(_tokenId,_minValue,_auctionTime); } //경매취소 function cancelAuction(uint _tokenId) public virtual { _cancelAuction(_tokenId); } //입찰 function bid(uint _tokenId) external payable { _bid(_tokenId); } //입찰취소 function cancelBid(uint _tokenId) external payable { _cancelBid(_tokenId); } //경매종료 function endAuction(uint _tokenId) external payable { _endAuction(_tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Bidding","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"CancelAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"CancelBid","type":"event"},{"anonymous":false,"inputs":[],"name":"CancelFeePaused","type":"event"},{"anonymous":false,"inputs":[],"name":"CancelFeeUnPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_minValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"CreateAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"EndAuction","type":"event"},{"anonymous":false,"inputs":[],"name":"FeePaused","type":"event"},{"anonymous":false,"inputs":[],"name":"FeeUnPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nftID","type":"uint256"},{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftID","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isListed","type":"bool"}],"name":"NftListStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"currentOwner","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":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nftID","type":"uint256"}],"name":"PriceUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nftID","type":"uint256"},{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"_contractOwner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"},{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"uint256","name":"_minValue","type":"uint256"},{"internalType":"uint256","name":"_auctionTime","type":"uint256"}],"name":"auctionMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"bid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bids","outputs":[{"internalType":"bool","name":"hasBid","type":"bool"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"cancelAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"cancelBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cancelFeePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelFeePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelFeeUnPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_minValue","type":"uint256"},{"internalType":"uint256","name":"_auctionTime","type":"uint256"}],"name":"createAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"endAuction","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"feePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeUnPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"hasAuction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"listedMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"},{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"offers","outputs":[{"internalType":"bool","name":"isForSale","type":"bool"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"minValue","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"ownerAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bool","name":"shouldBeListed","type":"bool"}],"name":"updateListingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"updatePrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"updateSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600881526020017f424c4f434b53444b0000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f424c4f434b53444b000000000000000000000000000000000000000000000000815250601460236200009a6301ffc9a760e01b6200021960201b60201c565b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160146101000a81548160ff02191690831515021790555081600281905550806003819055506000600460006101000a81548160ff0219169083151502179055506000600460016101000a81548160ff021916908315150217905550505081600c9080519060200190620001af92919062000322565b5080600d9080519060200190620001c892919062000322565b50620001e16380ac58cd60e01b6200021960201b60201c565b620001f9635b5e139f60e01b6200021960201b60201c565b6200021163780e9d6360e01b6200021960201b60201c565b5050620003d8565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415620002b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200035a5760008555620003a6565b82601f106200037557805160ff1916838001178555620003a6565b82800160010185558215620003a6579182015b82811115620003a557825182559160200191906001019062000388565b5b509050620003b59190620003b9565b5090565b5b80821115620003d4576000816000905550600101620003ba565b5090565b61599580620003e86000396000f3fe6080604052600436106102c95760003560e01c80637e8816b911610175578063a22cb465116100dc578063ca52a43311610095578063d96a094a1161006f578063d96a094a14611354578063e985e9c514611382578063f146292114611409578063f2fde38b1461145a576102c9565b8063ca52a433146112d7578063cda4beef146112ee578063d16fd8d41461133d576102c9565b8063a22cb46514610fda578063b88d4fde14611037578063b9a2de3a14611149578063bc8ba28f14611177578063bdde7897146111c8578063c87b56dd14611223576102c9565b806395d89b411161012e57806395d89b4114610e4257806396b5a75514610ed25780639703ef3514610f0d578063978bbdb914610f3b5780639819826a14610f6657806398214bcb14610f7d576102c9565b80637e8816b914610afd57806382367b2d14610c035780638456cb5914610c5e5780638804da6314610c755780638a72ea6a14610d855780638da5cb5b14610e01576102c9565b806342842e0e1161023457806350f1c94f116101ed5780636352211e116101c75780636352211e146109765780636c0360eb146109db57806370a0823114610a6b578063715018a614610ad0576102c9565b806350f1c94f1461085457806355f804b3146108815780635c975abb14610949576102c9565b806342842e0e146106a257806342966c681461071d5780634423c5f11461074b578063454a2ab3146107c05780634e79f1a1146107ee5780634f6ccce714610805576102c9565b806326a49e371161028657806326a49e371461053457806327fbe123146105835780632bb3b114146105b05780632f745c59146105f15780633c4da553146106605780633f4ba83a1461068b576102c9565b806301ffc9a7146102ce57806306fdde031461033e578063081812fc146103ce578063095ea7b31461043357806318160ddd1461048e57806323b872dd146104b9575b600080fd5b3480156102da57600080fd5b50610326600480360360208110156102f157600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506114c1565b60405180821515815260200191505060405180910390f35b34801561034a57600080fd5b50610353611528565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610393578082015181840152602081019050610378565b50505050905090810190601f1680156103c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103da57600080fd5b50610407600480360360208110156103f157600080fd5b81019080803590602001909291905050506115ca565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561043f57600080fd5b5061048c6004803603604081101561045657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611619565b005b34801561049a57600080fd5b506104a36116c5565b6040518082815260200191505060405180910390f35b3480156104c557600080fd5b50610532600480360360608110156104dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116d6565b005b34801561054057600080fd5b5061056d6004803603602081101561055757600080fd5b8101908080359060200190929190505050611719565b6040518082815260200191505060405180910390f35b34801561058f57600080fd5b50610598611731565b60405180821515815260200191505060405180910390f35b3480156105bc57600080fd5b506105c5611748565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105fd57600080fd5b5061064a6004803603604081101561061457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061176e565b6040518082815260200191505060405180910390f35b34801561066c57600080fd5b506106756117c9565b6040518082815260200191505060405180910390f35b34801561069757600080fd5b506106a06117f1565b005b3480156106ae57600080fd5b5061071b600480360360608110156106c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611982565b005b6107496004803603602081101561073357600080fd5b81019080803590602001909291905050506119bb565b005b34801561075757600080fd5b506107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611b78565b6040518084151581526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390f35b6107ec600480360360208110156107d657600080fd5b8101908080359060200190929190505050611bcf565b005b3480156107fa57600080fd5b50610803611bdb565b005b34801561081157600080fd5b5061083e6004803603602081101561082857600080fd5b8101908080359060200190929190505050611d44565b6040518082815260200191505060405180910390f35b34801561086057600080fd5b50610869611d67565b60405180821515815260200191505060405180910390f35b34801561088d57600080fd5b50610947600480360360208110156108a457600080fd5b81019080803590602001906401000000008111156108c157600080fd5b8201836020820111156108d357600080fd5b803590602001918460018302840111640100000000831117156108f557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d7e565b005b34801561095557600080fd5b5061095e611d8a565b60405180821515815260200191505060405180910390f35b34801561098257600080fd5b506109af6004803603602081101561099957600080fd5b8101908080359060200190929190505050611da1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e757600080fd5b506109f0611db3565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a30578082015181840152602081019050610a15565b50505050905090810190601f168015610a5d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a7757600080fd5b50610aba60048036036020811015610a8e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e55565b6040518082815260200191505060405180910390f35b348015610adc57600080fd5b50610ae5611ede565b60405180821515815260200191505060405180910390f35b348015610b0957600080fd5b50610bed60048036036060811015610b2057600080fd5b8101908080359060200190640100000000811115610b3d57600080fd5b820183602082011115610b4f57600080fd5b80359060200191846001830284011164010000000083111715610b7157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f95565b6040518082815260200191505060405180910390f35b348015610c0f57600080fd5b50610c4660048036036040811015610c2657600080fd5b8101908080359060200190929190803590602001909291905050506120cb565b60405180821515815260200191505060405180910390f35b348015610c6a57600080fd5b50610c736121be565b005b348015610c8157600080fd5b50610d6f60048036036080811015610c9857600080fd5b8101908080359060200190640100000000811115610cb557600080fd5b820183602082011115610cc757600080fd5b80359060200191846001830284011164010000000083111715610ce957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061234f565b6040518082815260200191505060405180910390f35b348015610d9157600080fd5b50610dbe60048036036020811015610da857600080fd5b8101908080359060200190929190505050612465565b6040518085151581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390f35b348015610e0d57600080fd5b50610e166124c2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e4e57600080fd5b50610e576124ec565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e97578082015181840152602081019050610e7c565b50505050905090810190601f168015610ec45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ede57600080fd5b50610f0b60048036036020811015610ef557600080fd5b810190808035906020019092919050505061258e565b005b610f3960048036036020811015610f2357600080fd5b810190808035906020019092919050505061259a565b005b348015610f4757600080fd5b50610f506125a6565b6040518082815260200191505060405180910390f35b348015610f7257600080fd5b50610f7b6125ce565b005b348015610f8957600080fd5b50610fc260048036036040811015610fa057600080fd5b8101908080359060200190929190803515159060200190929190505050612738565b60405180821515815260200191505060405180910390f35b348015610fe657600080fd5b5061103560048036036040811015610ffd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612820565b005b34801561104357600080fd5b506111476004803603608081101561105a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156110c157600080fd5b8201836020820111156110d357600080fd5b803590602001918460018302840111640100000000831117156110f557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061296d565b005b6111756004803603602081101561115f57600080fd5b81019080803590602001909291905050506129b2565b005b34801561118357600080fd5b506111b06004803603602081101561119a57600080fd5b81019080803590602001909291905050506129be565b60405180821515815260200191505060405180910390f35b3480156111d457600080fd5b5061120b600480360360408110156111eb57600080fd5b8101908080359060200190929190803590602001909291905050506129de565b60405180821515815260200191505060405180910390f35b34801561122f57600080fd5b5061125c6004803603602081101561124657600080fd5b8101908080359060200190929190505050612b83565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561129c578082015181840152602081019050611281565b50505050905090810190601f1680156112c95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156112e357600080fd5b506112ec612e08565b005b3480156112fa57600080fd5b5061133b6004803603606081101561131157600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612f71565b005b34801561134957600080fd5b50611352612fb2565b005b6113806004803603602081101561136a57600080fd5b810190808035906020019092919050505061311c565b005b34801561138e57600080fd5b506113f1600480360360408110156113a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061323a565b60405180821515815260200191505060405180910390f35b34801561141557600080fd5b506114426004803603602081101561142c57600080fd5b81019080803590602001909291905050506132ce565b60405180821515815260200191505060405180910390f35b34801561146657600080fd5b506114a96004803603602081101561147d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613318565b60405180821515815260200191505060405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115c05780601f10611595576101008083540402835291602001916115c0565b820191906000526020600020905b8154815290600101906020018083116115a357829003601f168201915b5050505050905090565b60006115d582613456565b6115de57600080fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061162482611da1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561165f57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1661167e613473565b73ffffffffffffffffffffffffffffffffffffffff1614806116ad57506116ac816116a7613473565b61323a565b5b6116b657600080fd5b6116c0838361347b565b505050565b60006116d16005613534565b905090565b6116e76116e1613473565b82613549565b6116f057600080fd5b600015156116fd826132ce565b15151461170957600080fd5b611714838383613671565b505050565b60116020528060005260406000206000915090505481565b6000600460019054906101000a900460ff16905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006117c182600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061381c90919063ffffffff16565b905092915050565b6000600115156117d7611731565b151514156117e857600090506117ee565b60035490505b90565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b61189f611d8a565b611911576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600160146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611955613473565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000151561198f826132ce565b15151461199b57600080fd5b6119b68383836040518060200160405280600081525061296d565b505050565b6119cc6119c6613473565b82613549565b80611a2b57506119da613473565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611a80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806158eb6030913960400191505060405180910390fd5b6000600e60008381526020019081526020016000209050600115158160000160009054906101000a900460ff1615151415611b6b576000600f60008481526020019081526020016000209050600115158160000160009054906101000a900460ff1615151415611b605760008160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc83600101549081150290604051600060405180830381858888f19350505050158015611b5d573d6000803e3d6000fd5b50505b611b6983613836565b505b611b74826139c4565b5050565b600f6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905083565b611bd881613afe565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b611c89611d67565b611cfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600460006101000a81548160ff0219169083151502179055507f0a9d058aff97d3ed3388247bac7d508f44a460217484407ce5bba66affc17daf60405160405180910390a1565b600080611d5b836005613d2090919063ffffffff16565b50905080915050919050565b6000600460009054906101000a900460ff16905090565b611d8781613d4c565b50565b6000600160149054906101000a900460ff16905090565b6000611dac82613d66565b9050919050565b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e4b5780601f10611e2057610100808354040283529160200191611e4b565b820191906000526020600020905b815481529060010190602001808311611e2e57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e9057600080fd5b611ed7600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613d83565b9050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b611f906000613d98565b905090565b6000806001611fa26116c5565b01905082601160008381526020019081526020016000208190555060016012600083815260200190815260200160002060006101000a81548160ff021916908315150217905550611ff38482613e60565b611ffd8186613e7e565b8373ffffffffffffffffffffffffffffffffffffffff167ff2cb5e52049d127ad1c335f1cc25f2fdbc911bec1beb2611f4c1e8b1c274d4b48483886040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612084578082015181840152602081019050612069565b50505050905090810190601f1680156120b15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2809150509392505050565b60008015156120d9846132ce565b1515146120e557600080fd5b60006011600085815260200190815260200160002054905061210684611da1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461213d57600080fd5b8260116000868152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f8647dab5101cbe18afb171756e9753802f9d66725bf2346b079b8b1a275e011682858760405180848152602001838152602001828152602001935050505060405180910390a2600191505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b61226c611d8a565b156122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60018060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612322613473565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600080600161235c6116c5565b0190508360116000838152602001908152602001600020819055506123818582613e60565b61238b8187613e7e565b8473ffffffffffffffffffffffffffffffffffffffff167ff2cb5e52049d127ad1c335f1cc25f2fdbc911bec1beb2611f4c1e8b1c274d4b48583896040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156124125780820151818401526020810190506123f7565b50505050905090810190601f16801561243f5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2612459818585613ebc565b80915050949350505050565b600e6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905084565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125845780601f1061255957610100808354040283529160200191612584565b820191906000526020600020905b81548152906001019060200180831161256757829003601f168201915b5050505050905090565b61259781614069565b50565b6125a381614225565b50565b6000600115156125b4611d67565b151514156125c557600090506125cb565b60025490505b90565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b61267c611d67565b156126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600460006101000a81548160ff0219169083151502179055507f51f99560a97e6809d74ff4458c12419031c9b6d4d8eae6a6b26bf8386fb0c4fa60405160405180910390a1565b600061274383611da1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461277a57600080fd5b60001515612787846132ce565b15151461279357600080fd5b816012600085815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f3fd63d9ca8dc693a1b9911e664951294721009a4f6239c862d6719a160a1edfc84846040518083815260200182151581526020019250505060405180910390a26001905092915050565b612828613473565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561286057600080fd5b806009600061286d613473565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661291a613473565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b61297e612978613473565b83613549565b61298757600080fd5b60001515612994836132ce565b1515146129a057600080fd5b6129ac84848484614502565b50505050565b6129bb81614528565b50565b60126020528060005260406000206000915054906101000a900460ff1681565b60008015156129ec846132ce565b1515146129f857600080fd5b600060116000858152602001908152602001600020549050612a1984611da1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a5057600080fd5b8260116000868152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f3fd63d9ca8dc693a1b9911e664951294721009a4f6239c862d6719a160a1edfc8560016040518083815260200182151581526020019250505060405180910390a2600115156012600086815260200190815260200160002060009054906101000a900460ff16151514612b785760016012600086815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f8647dab5101cbe18afb171756e9753802f9d66725bf2346b079b8b1a275e011682858760405180848152602001838152602001828152602001935050505060405180910390a25b600191505092915050565b6060612b8e82613456565b612b9757600080fd5b6000600a60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c405780601f10612c1557610100808354040283529160200191612c40565b820191906000526020600020905b815481529060010190602001808311612c2357829003601f168201915b505050505090506000612c51611db3565b9050600081511415612c67578192505050612e03565b600082511115612d385780826040516020018083805190602001908083835b60208310612ca95780518252602082019150602081019050602083039250612c86565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310612cfa5780518252602082019150602081019050602083039250612cd7565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050612e03565b80612d428561471b565b6040516020018083805190602001908083835b60208310612d785780518252602082019150602081019050602083039250612d55565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310612dc95780518252602082019150602081019050602083039250612da6565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052925050505b919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b612eb6611731565b612f28576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600460016101000a81548160ff0219169083151502179055507f67592efac9ad4bc8a051561f7008dd48427e81ea709a2f61ad386fa68189b35c60405160405180910390a1565b600015156012600085815260200190815260200160002060009054906101000a900460ff16151514612fa257600080fd5b612fad838383613ebc565b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b613060611731565b156130d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600460016101000a81548160ff0219169083151502179055507f6f941072281a73a3d1a56154741446c3752559d3c97ae913f09e25382677933560405160405180910390a1565b61312581614862565b600061313082611da1565b9050600033905061314083614908565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fef258f47a33a1cba99d81ea828f234ff5d6cb31034c0f79ecb5198f8c6d118f66011600087815260200190815260200160002054866131ad88612b83565b6040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156131f95780820151818401526020810190506131de565b50505050905090810190601f1680156132265780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080600e60008481526020019081526020016000209050600115158160000160009054906101000a900460ff1615151461330d576000915050613313565b60019150505b919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146133c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604581526020018061591b6045913960600191505060405180910390fd5b61344f82613d98565b9050919050565b600061346c826005614acc90919063ffffffff16565b9050919050565b600033905090565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166134ee83613d66565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061354282600001614ae6565b9050919050565b600061355482613456565b61355d57600080fd5b600061356883613d66565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806135d757508373ffffffffffffffffffffffffffffffffffffffff166135bf846115ca565b73ffffffffffffffffffffffffffffffffffffffff16145b806136685750600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661369182613d66565b73ffffffffffffffffffffffffffffffffffffffff16146136b157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136eb57600080fd5b6136f6838383614af7565b61370160008261347b565b61375281600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614b0e90919063ffffffff16565b506137a481600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614b2890919063ffffffff16565b506137bb81836005614b429092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061382b8360000183614b77565b60001c905092915050565b6040518060800160405280600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815250600e600083815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010155606082015181600201559050506040518060600160405280600015158152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250600f600083815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816001015590505050565b60006139cf82613d66565b90506139dd81600084614af7565b6139e860008361347b565b6000600a600084815260200190815260200160002080546001816001161561010002031660029004905014613a3757600a60008381526020019081526020016000206000613a36919061572c565b5b613a8882600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614b0e90919063ffffffff16565b50613a9d826005614bfa90919063ffffffff16565b5081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b3373ffffffffffffffffffffffffffffffffffffffff16613b1e82613d66565b73ffffffffffffffffffffffffffffffffffffffff161415613b3f57600080fd5b6000600e6000838152602001908152602001600020905080600201544210613b6657600080fd5b8060010154341015613b7757600080fd5b6000600f6000848152602001908152602001600020905080600101543411613b9e57600080fd5b600081600101541115613c215760008160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc83600101549081150290604051600060405180830381858888f19350505050158015613c1e573d6000803e3d6000fd5b50505b60405180606001604052806001151581526020013373ffffffffffffffffffffffffffffffffffffffff16815260200134815250600f600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600101559050507f6fe605fcf3f0af8122bf2ca880af248fc500eed81268c984dc2f51f73d96fc668334604051808381526020018281526020019250505060405180910390a1505050565b600080600080613d338660000186614c14565b915091508160001c8160001c9350935050509250929050565b80600b9080519060200190613d62929190615774565b5050565b6000613d7c826005614cad90919063ffffffff16565b9050919050565b6000613d9182600001614cca565b9050919050565b60008173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b613e7a828260405180602001604052806000815250614cdb565b5050565b613e8782613456565b613e9057600080fd5b80600a60008481526020019081526020016000209080519060200190613eb7929190615774565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16613edc84613d66565b73ffffffffffffffffffffffffffffffffffffffff1614613efc57600080fd5b6000600e60008581526020019081526020016000209050600115158160000160009054906101000a900460ff1615151415613f3657600080fd5b60405180608001604052806001151581526020013373ffffffffffffffffffffffffffffffffffffffff168152602001848152602001834201815250600e600086815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010155606082015181600201559050503373ffffffffffffffffffffffffffffffffffffffff167f5e4dbe799442580e0983dedea209e02d0497b6e3383338a9e1ac3aa117b491ec858585420160405180848152602001838152602001828152602001935050505060405180910390a250505050565b3373ffffffffffffffffffffffffffffffffffffffff1661408982613d66565b73ffffffffffffffffffffffffffffffffffffffff16146140a957600080fd5b6000600e60008381526020019081526020016000209050600115158160000160009054906101000a900460ff161515146140e257600080fd5b6000600f60008481526020019081526020016000209050600115158160000160009054906101000a900460ff161515141561411c57600080fd5b60405180608001604052806000151581526020013373ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815250600e600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010155606082015181600201559050507fbea0e66c2d42b9131695ceea7d1aaa21b37e93070cde19c9b5fbd686a3259292836040518082815260200191505060405180910390a1505050565b6000600e60008381526020019081526020016000209050600115158160000160009054906101000a900460ff1615151461425e57600080fd5b8060020154421061426e57600080fd5b6000600f60008481526020019081526020016000209050600115158160000160009054906101000a900460ff161515146142a757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461430357600080fd5b60008160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008360000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006103e86143626117c9565b8560010154028161436f57fe5b0490508273ffffffffffffffffffffffffffffffffffffffff166108fc828660010154039081150290604051600060405180830381858888f193505050501580156143be573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614405573d6000803e3d6000fd5b506040518060600160405280600015158152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250600f600088815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600101559050507f7687efe94566d20f7ebb8eff43bb57b2c014749dfd9ad179089e58c338ecdfa7866040518082815260200191505060405180910390a1505050505050565b61450d848484613671565b61451984848484614d00565b61452257600080fd5b50505050565b6000600e60008381526020019081526020016000209050806002015442101561455057600080fd5b600115158160000160009054906101000a900460ff1615151461457257600080fd5b600061457d83613d66565b90506000600f600085815260200190815260200160002090506145e98360000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686613671565b60006103e86145f66125a6565b8360010154028161460357fe5b04905060008183600101540390508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614657573d6000803e3d6000fd5b506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156146c5573d6000803e3d6000fd5b507fc87036081503cc1fd53dc456ee0c40aef140882f77b06b4b4b554fee2b60816a878560010154604051808381526020018281526020019250505060405180910390a161471287613836565b50505050505050565b60606000821415614763576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061485d565b600082905060005b6000821461478d578080600101915050600a828161478557fe5b04915061476b565b60008167ffffffffffffffff811180156147a657600080fd5b506040519080825280601f01601f1916602001820160405280156147d95781602001600182028036833780820191505090505b50905060006001830390508593505b6000841461485557600a84816147fa57fe5b0660300160f81b8282806001900393508151811061481457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a848161484d57fe5b0493506147e8565b819450505050505b919050565b60006012600083815260200190815260200160002060009054906101000a900460ff16905061489082613456565b61489957600080fd5b806148a357600080fd5b60116000838152602001908152602001600020543410156148c357600080fd5b6148cc82611da1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561490457600080fd5b5050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000339050600061493f84611da1565b905061494c818386613671565b60006103e86149596125a6565b6011600088815260200190815260200160002054028161497557fe5b04905060008160116000888152602001908152602001600020540390508273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156149d8573d6000803e3d6000fd5b508473ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015614a1f573d6000803e3d6000fd5b506011600087815260200190815260200160002054341115614a98578373ffffffffffffffffffffffffffffffffffffffff166108fc601160008981526020019081526020016000205434039081150290604051600060405180830381858888f19350505050158015614a96573d6000803e3d6000fd5b505b60006012600088815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050565b6000614ade836000018360001b614f19565b905092915050565b600081600001805490509050919050565b614aff611d8a565b15614b0957600080fd5b505050565b6000614b20836000018360001b614f3c565b905092915050565b6000614b3a836000018360001b615024565b905092915050565b6000614b6e846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b615094565b90509392505050565b600081836000018054905011614bd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158206022913960400191505060405180910390fd5b826000018281548110614be757fe5b9060005260206000200154905092915050565b6000614c0c836000018360001b615170565b905092915050565b60008082846000018054905011614c76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158c96022913960400191505060405180910390fd5b6000846000018481548110614c8757fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b6000614cbf836000018360001b615289565b60001c905092915050565b600081600001805490509050919050565b614ce58383615348565b614cf26000848484614d00565b614cfb57600080fd5b505050565b6000614d218473ffffffffffffffffffffffffffffffffffffffff1661546a565b614d2e5760019050614f11565b6000614e9863150b7a0260e01b614d43613473565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614dc7578082015181840152602081019050614dac565b50505050905090810190601f168015614df45780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001615842603291398773ffffffffffffffffffffffffffffffffffffffff1661547d9092919063ffffffff16565b90506000818060200190516020811015614eb157600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050505b949350505050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146150185760006001820390506000600186600001805490500390506000866000018281548110614f8757fe5b9060005260206000200154905080876000018481548110614fa457fe5b9060005260206000200181905550600183018760010160008381526020019081526020016000208190555086600001805480614fdc57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061501e565b60009150505b92915050565b60006150308383615495565b61508957826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061508e565b600090505b92915050565b600080846001016000858152602001908152602001600020549050600081141561513b57846000016040518060400160405280868152602001858152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550508460000180549050856001016000868152602001908152602001600020819055506001915050615169565b8285600001600183038154811061514e57fe5b90600052602060002090600202016001018190555060009150505b9392505050565b6000808360010160008481526020019081526020016000205490506000811461527d57600060018203905060006001866000018054905003905060008660000182815481106151bb57fe5b90600052602060002090600202019050808760000184815481106151db57fe5b906000526020600020906002020160008201548160000155600182015481600101559050506001830187600101600083600001548152602001908152602001600020819055508660000180548061522e57fe5b6001900381819060005260206000209060020201600080820160009055600182016000905550509055866001016000878152602001908152602001600020600090556001945050505050615283565b60009150505b92915050565b600080836001016000848152602001908152602001600020549050600081141561531b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f456e756d657261626c654d61703a206e6f6e6578697374656e74206b6579000081525060200191505060405180910390fd5b83600001600182038154811061532d57fe5b90600052602060002090600202016001015491505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561538257600080fd5b61538b81613456565b1561539557600080fd5b6153a160008383614af7565b6153f281600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614b2890919063ffffffff16565b5061540981836005614b429092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b606061548c84846000856154b8565b90509392505050565b600080836001016000848152602001908152602001600020541415905092915050565b606082471015615513576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806158746026913960400191505060405180910390fd5b61551c8561546a565b61558e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106155dd57805182526020820191506020810190506020830392506155ba565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461563f576040519150601f19603f3d011682016040523d82523d6000602084013e615644565b606091505b5091509150615654828286615660565b92505050949350505050565b6060831561567057829050615725565b6000835111156156835782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156156ea5780820151818401526020810190506156cf565b50505050905090810190601f1680156157175780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b9392505050565b50805460018160011615610100020316600290046000825580601f106157525750615771565b601f0160209004906000526020600020908101906157709190615802565b5b50565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826157aa57600085556157f1565b82601f106157c357805160ff19168380011785556157f1565b828001600101855582156157f1579182015b828111156157f05782518255916020019190600101906157d5565b5b5090506157fe9190615802565b5090565b5b8082111561581b576000816000905550600101615803565b509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4f776e61626c65203a2046756e6374696f6e2063616c6c656420627920756e617574686f72697a656420757365722e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644f776e61626c652f7472616e736665724f776e657273686970203a2063616e6e6f74207472616e73666572206f776e65727368697020746f207a65726f2061646472657373a26469706673582212209773c6821252322ac378e301c14f196e7e72b4481780800ce0e74de1e487570464736f6c6343000706003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000008424c4f434b53444b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008424c4f434b53444b000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102c95760003560e01c80637e8816b911610175578063a22cb465116100dc578063ca52a43311610095578063d96a094a1161006f578063d96a094a14611354578063e985e9c514611382578063f146292114611409578063f2fde38b1461145a576102c9565b8063ca52a433146112d7578063cda4beef146112ee578063d16fd8d41461133d576102c9565b8063a22cb46514610fda578063b88d4fde14611037578063b9a2de3a14611149578063bc8ba28f14611177578063bdde7897146111c8578063c87b56dd14611223576102c9565b806395d89b411161012e57806395d89b4114610e4257806396b5a75514610ed25780639703ef3514610f0d578063978bbdb914610f3b5780639819826a14610f6657806398214bcb14610f7d576102c9565b80637e8816b914610afd57806382367b2d14610c035780638456cb5914610c5e5780638804da6314610c755780638a72ea6a14610d855780638da5cb5b14610e01576102c9565b806342842e0e1161023457806350f1c94f116101ed5780636352211e116101c75780636352211e146109765780636c0360eb146109db57806370a0823114610a6b578063715018a614610ad0576102c9565b806350f1c94f1461085457806355f804b3146108815780635c975abb14610949576102c9565b806342842e0e146106a257806342966c681461071d5780634423c5f11461074b578063454a2ab3146107c05780634e79f1a1146107ee5780634f6ccce714610805576102c9565b806326a49e371161028657806326a49e371461053457806327fbe123146105835780632bb3b114146105b05780632f745c59146105f15780633c4da553146106605780633f4ba83a1461068b576102c9565b806301ffc9a7146102ce57806306fdde031461033e578063081812fc146103ce578063095ea7b31461043357806318160ddd1461048e57806323b872dd146104b9575b600080fd5b3480156102da57600080fd5b50610326600480360360208110156102f157600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506114c1565b60405180821515815260200191505060405180910390f35b34801561034a57600080fd5b50610353611528565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610393578082015181840152602081019050610378565b50505050905090810190601f1680156103c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103da57600080fd5b50610407600480360360208110156103f157600080fd5b81019080803590602001909291905050506115ca565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561043f57600080fd5b5061048c6004803603604081101561045657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611619565b005b34801561049a57600080fd5b506104a36116c5565b6040518082815260200191505060405180910390f35b3480156104c557600080fd5b50610532600480360360608110156104dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116d6565b005b34801561054057600080fd5b5061056d6004803603602081101561055757600080fd5b8101908080359060200190929190505050611719565b6040518082815260200191505060405180910390f35b34801561058f57600080fd5b50610598611731565b60405180821515815260200191505060405180910390f35b3480156105bc57600080fd5b506105c5611748565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105fd57600080fd5b5061064a6004803603604081101561061457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061176e565b6040518082815260200191505060405180910390f35b34801561066c57600080fd5b506106756117c9565b6040518082815260200191505060405180910390f35b34801561069757600080fd5b506106a06117f1565b005b3480156106ae57600080fd5b5061071b600480360360608110156106c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611982565b005b6107496004803603602081101561073357600080fd5b81019080803590602001909291905050506119bb565b005b34801561075757600080fd5b506107846004803603602081101561076e57600080fd5b8101908080359060200190929190505050611b78565b6040518084151581526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390f35b6107ec600480360360208110156107d657600080fd5b8101908080359060200190929190505050611bcf565b005b3480156107fa57600080fd5b50610803611bdb565b005b34801561081157600080fd5b5061083e6004803603602081101561082857600080fd5b8101908080359060200190929190505050611d44565b6040518082815260200191505060405180910390f35b34801561086057600080fd5b50610869611d67565b60405180821515815260200191505060405180910390f35b34801561088d57600080fd5b50610947600480360360208110156108a457600080fd5b81019080803590602001906401000000008111156108c157600080fd5b8201836020820111156108d357600080fd5b803590602001918460018302840111640100000000831117156108f557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d7e565b005b34801561095557600080fd5b5061095e611d8a565b60405180821515815260200191505060405180910390f35b34801561098257600080fd5b506109af6004803603602081101561099957600080fd5b8101908080359060200190929190505050611da1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e757600080fd5b506109f0611db3565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a30578082015181840152602081019050610a15565b50505050905090810190601f168015610a5d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a7757600080fd5b50610aba60048036036020811015610a8e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e55565b6040518082815260200191505060405180910390f35b348015610adc57600080fd5b50610ae5611ede565b60405180821515815260200191505060405180910390f35b348015610b0957600080fd5b50610bed60048036036060811015610b2057600080fd5b8101908080359060200190640100000000811115610b3d57600080fd5b820183602082011115610b4f57600080fd5b80359060200191846001830284011164010000000083111715610b7157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f95565b6040518082815260200191505060405180910390f35b348015610c0f57600080fd5b50610c4660048036036040811015610c2657600080fd5b8101908080359060200190929190803590602001909291905050506120cb565b60405180821515815260200191505060405180910390f35b348015610c6a57600080fd5b50610c736121be565b005b348015610c8157600080fd5b50610d6f60048036036080811015610c9857600080fd5b8101908080359060200190640100000000811115610cb557600080fd5b820183602082011115610cc757600080fd5b80359060200191846001830284011164010000000083111715610ce957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061234f565b6040518082815260200191505060405180910390f35b348015610d9157600080fd5b50610dbe60048036036020811015610da857600080fd5b8101908080359060200190929190505050612465565b6040518085151581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390f35b348015610e0d57600080fd5b50610e166124c2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e4e57600080fd5b50610e576124ec565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e97578082015181840152602081019050610e7c565b50505050905090810190601f168015610ec45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ede57600080fd5b50610f0b60048036036020811015610ef557600080fd5b810190808035906020019092919050505061258e565b005b610f3960048036036020811015610f2357600080fd5b810190808035906020019092919050505061259a565b005b348015610f4757600080fd5b50610f506125a6565b6040518082815260200191505060405180910390f35b348015610f7257600080fd5b50610f7b6125ce565b005b348015610f8957600080fd5b50610fc260048036036040811015610fa057600080fd5b8101908080359060200190929190803515159060200190929190505050612738565b60405180821515815260200191505060405180910390f35b348015610fe657600080fd5b5061103560048036036040811015610ffd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612820565b005b34801561104357600080fd5b506111476004803603608081101561105a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156110c157600080fd5b8201836020820111156110d357600080fd5b803590602001918460018302840111640100000000831117156110f557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061296d565b005b6111756004803603602081101561115f57600080fd5b81019080803590602001909291905050506129b2565b005b34801561118357600080fd5b506111b06004803603602081101561119a57600080fd5b81019080803590602001909291905050506129be565b60405180821515815260200191505060405180910390f35b3480156111d457600080fd5b5061120b600480360360408110156111eb57600080fd5b8101908080359060200190929190803590602001909291905050506129de565b60405180821515815260200191505060405180910390f35b34801561122f57600080fd5b5061125c6004803603602081101561124657600080fd5b8101908080359060200190929190505050612b83565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561129c578082015181840152602081019050611281565b50505050905090810190601f1680156112c95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156112e357600080fd5b506112ec612e08565b005b3480156112fa57600080fd5b5061133b6004803603606081101561131157600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612f71565b005b34801561134957600080fd5b50611352612fb2565b005b6113806004803603602081101561136a57600080fd5b810190808035906020019092919050505061311c565b005b34801561138e57600080fd5b506113f1600480360360408110156113a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061323a565b60405180821515815260200191505060405180910390f35b34801561141557600080fd5b506114426004803603602081101561142c57600080fd5b81019080803590602001909291905050506132ce565b60405180821515815260200191505060405180910390f35b34801561146657600080fd5b506114a96004803603602081101561147d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613318565b60405180821515815260200191505060405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115c05780601f10611595576101008083540402835291602001916115c0565b820191906000526020600020905b8154815290600101906020018083116115a357829003601f168201915b5050505050905090565b60006115d582613456565b6115de57600080fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061162482611da1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561165f57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1661167e613473565b73ffffffffffffffffffffffffffffffffffffffff1614806116ad57506116ac816116a7613473565b61323a565b5b6116b657600080fd5b6116c0838361347b565b505050565b60006116d16005613534565b905090565b6116e76116e1613473565b82613549565b6116f057600080fd5b600015156116fd826132ce565b15151461170957600080fd5b611714838383613671565b505050565b60116020528060005260406000206000915090505481565b6000600460019054906101000a900460ff16905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006117c182600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061381c90919063ffffffff16565b905092915050565b6000600115156117d7611731565b151514156117e857600090506117ee565b60035490505b90565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b61189f611d8a565b611911576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600160146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611955613473565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000151561198f826132ce565b15151461199b57600080fd5b6119b68383836040518060200160405280600081525061296d565b505050565b6119cc6119c6613473565b82613549565b80611a2b57506119da613473565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611a80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806158eb6030913960400191505060405180910390fd5b6000600e60008381526020019081526020016000209050600115158160000160009054906101000a900460ff1615151415611b6b576000600f60008481526020019081526020016000209050600115158160000160009054906101000a900460ff1615151415611b605760008160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc83600101549081150290604051600060405180830381858888f19350505050158015611b5d573d6000803e3d6000fd5b50505b611b6983613836565b505b611b74826139c4565b5050565b600f6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905083565b611bd881613afe565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b611c89611d67565b611cfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600460006101000a81548160ff0219169083151502179055507f0a9d058aff97d3ed3388247bac7d508f44a460217484407ce5bba66affc17daf60405160405180910390a1565b600080611d5b836005613d2090919063ffffffff16565b50905080915050919050565b6000600460009054906101000a900460ff16905090565b611d8781613d4c565b50565b6000600160149054906101000a900460ff16905090565b6000611dac82613d66565b9050919050565b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e4b5780601f10611e2057610100808354040283529160200191611e4b565b820191906000526020600020905b815481529060010190602001808311611e2e57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e9057600080fd5b611ed7600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613d83565b9050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b611f906000613d98565b905090565b6000806001611fa26116c5565b01905082601160008381526020019081526020016000208190555060016012600083815260200190815260200160002060006101000a81548160ff021916908315150217905550611ff38482613e60565b611ffd8186613e7e565b8373ffffffffffffffffffffffffffffffffffffffff167ff2cb5e52049d127ad1c335f1cc25f2fdbc911bec1beb2611f4c1e8b1c274d4b48483886040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612084578082015181840152602081019050612069565b50505050905090810190601f1680156120b15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2809150509392505050565b60008015156120d9846132ce565b1515146120e557600080fd5b60006011600085815260200190815260200160002054905061210684611da1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461213d57600080fd5b8260116000868152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f8647dab5101cbe18afb171756e9753802f9d66725bf2346b079b8b1a275e011682858760405180848152602001838152602001828152602001935050505060405180910390a2600191505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b61226c611d8a565b156122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60018060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612322613473565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600080600161235c6116c5565b0190508360116000838152602001908152602001600020819055506123818582613e60565b61238b8187613e7e565b8473ffffffffffffffffffffffffffffffffffffffff167ff2cb5e52049d127ad1c335f1cc25f2fdbc911bec1beb2611f4c1e8b1c274d4b48583896040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156124125780820151818401526020810190506123f7565b50505050905090810190601f16801561243f5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2612459818585613ebc565b80915050949350505050565b600e6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905084565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125845780601f1061255957610100808354040283529160200191612584565b820191906000526020600020905b81548152906001019060200180831161256757829003601f168201915b5050505050905090565b61259781614069565b50565b6125a381614225565b50565b6000600115156125b4611d67565b151514156125c557600090506125cb565b60025490505b90565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b61267c611d67565b156126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600460006101000a81548160ff0219169083151502179055507f51f99560a97e6809d74ff4458c12419031c9b6d4d8eae6a6b26bf8386fb0c4fa60405160405180910390a1565b600061274383611da1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461277a57600080fd5b60001515612787846132ce565b15151461279357600080fd5b816012600085815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f3fd63d9ca8dc693a1b9911e664951294721009a4f6239c862d6719a160a1edfc84846040518083815260200182151581526020019250505060405180910390a26001905092915050565b612828613473565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561286057600080fd5b806009600061286d613473565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661291a613473565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b61297e612978613473565b83613549565b61298757600080fd5b60001515612994836132ce565b1515146129a057600080fd5b6129ac84848484614502565b50505050565b6129bb81614528565b50565b60126020528060005260406000206000915054906101000a900460ff1681565b60008015156129ec846132ce565b1515146129f857600080fd5b600060116000858152602001908152602001600020549050612a1984611da1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a5057600080fd5b8260116000868152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f3fd63d9ca8dc693a1b9911e664951294721009a4f6239c862d6719a160a1edfc8560016040518083815260200182151581526020019250505060405180910390a2600115156012600086815260200190815260200160002060009054906101000a900460ff16151514612b785760016012600086815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f8647dab5101cbe18afb171756e9753802f9d66725bf2346b079b8b1a275e011682858760405180848152602001838152602001828152602001935050505060405180910390a25b600191505092915050565b6060612b8e82613456565b612b9757600080fd5b6000600a60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c405780601f10612c1557610100808354040283529160200191612c40565b820191906000526020600020905b815481529060010190602001808311612c2357829003601f168201915b505050505090506000612c51611db3565b9050600081511415612c67578192505050612e03565b600082511115612d385780826040516020018083805190602001908083835b60208310612ca95780518252602082019150602081019050602083039250612c86565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310612cfa5780518252602082019150602081019050602083039250612cd7565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050612e03565b80612d428561471b565b6040516020018083805190602001908083835b60208310612d785780518252602082019150602081019050602083039250612d55565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310612dc95780518252602082019150602081019050602083039250612da6565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052925050505b919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b612eb6611731565b612f28576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600460016101000a81548160ff0219169083151502179055507f67592efac9ad4bc8a051561f7008dd48427e81ea709a2f61ad386fa68189b35c60405160405180910390a1565b600015156012600085815260200190815260200160002060009054906101000a900460ff16151514612fa257600080fd5b612fad838383613ebc565b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b613060611731565b156130d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600460016101000a81548160ff0219169083151502179055507f6f941072281a73a3d1a56154741446c3752559d3c97ae913f09e25382677933560405160405180910390a1565b61312581614862565b600061313082611da1565b9050600033905061314083614908565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fef258f47a33a1cba99d81ea828f234ff5d6cb31034c0f79ecb5198f8c6d118f66011600087815260200190815260200160002054866131ad88612b83565b6040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156131f95780820151818401526020810190506131de565b50505050905090810190601f1680156132265780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080600e60008481526020019081526020016000209050600115158160000160009054906101000a900460ff1615151461330d576000915050613313565b60019150505b919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146133c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061589a602f913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604581526020018061591b6045913960600191505060405180910390fd5b61344f82613d98565b9050919050565b600061346c826005614acc90919063ffffffff16565b9050919050565b600033905090565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166134ee83613d66565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061354282600001614ae6565b9050919050565b600061355482613456565b61355d57600080fd5b600061356883613d66565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806135d757508373ffffffffffffffffffffffffffffffffffffffff166135bf846115ca565b73ffffffffffffffffffffffffffffffffffffffff16145b806136685750600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661369182613d66565b73ffffffffffffffffffffffffffffffffffffffff16146136b157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136eb57600080fd5b6136f6838383614af7565b61370160008261347b565b61375281600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614b0e90919063ffffffff16565b506137a481600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614b2890919063ffffffff16565b506137bb81836005614b429092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061382b8360000183614b77565b60001c905092915050565b6040518060800160405280600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815250600e600083815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010155606082015181600201559050506040518060600160405280600015158152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250600f600083815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816001015590505050565b60006139cf82613d66565b90506139dd81600084614af7565b6139e860008361347b565b6000600a600084815260200190815260200160002080546001816001161561010002031660029004905014613a3757600a60008381526020019081526020016000206000613a36919061572c565b5b613a8882600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614b0e90919063ffffffff16565b50613a9d826005614bfa90919063ffffffff16565b5081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b3373ffffffffffffffffffffffffffffffffffffffff16613b1e82613d66565b73ffffffffffffffffffffffffffffffffffffffff161415613b3f57600080fd5b6000600e6000838152602001908152602001600020905080600201544210613b6657600080fd5b8060010154341015613b7757600080fd5b6000600f6000848152602001908152602001600020905080600101543411613b9e57600080fd5b600081600101541115613c215760008160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc83600101549081150290604051600060405180830381858888f19350505050158015613c1e573d6000803e3d6000fd5b50505b60405180606001604052806001151581526020013373ffffffffffffffffffffffffffffffffffffffff16815260200134815250600f600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600101559050507f6fe605fcf3f0af8122bf2ca880af248fc500eed81268c984dc2f51f73d96fc668334604051808381526020018281526020019250505060405180910390a1505050565b600080600080613d338660000186614c14565b915091508160001c8160001c9350935050509250929050565b80600b9080519060200190613d62929190615774565b5050565b6000613d7c826005614cad90919063ffffffff16565b9050919050565b6000613d9182600001614cca565b9050919050565b60008173ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a381600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b613e7a828260405180602001604052806000815250614cdb565b5050565b613e8782613456565b613e9057600080fd5b80600a60008481526020019081526020016000209080519060200190613eb7929190615774565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16613edc84613d66565b73ffffffffffffffffffffffffffffffffffffffff1614613efc57600080fd5b6000600e60008581526020019081526020016000209050600115158160000160009054906101000a900460ff1615151415613f3657600080fd5b60405180608001604052806001151581526020013373ffffffffffffffffffffffffffffffffffffffff168152602001848152602001834201815250600e600086815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010155606082015181600201559050503373ffffffffffffffffffffffffffffffffffffffff167f5e4dbe799442580e0983dedea209e02d0497b6e3383338a9e1ac3aa117b491ec858585420160405180848152602001838152602001828152602001935050505060405180910390a250505050565b3373ffffffffffffffffffffffffffffffffffffffff1661408982613d66565b73ffffffffffffffffffffffffffffffffffffffff16146140a957600080fd5b6000600e60008381526020019081526020016000209050600115158160000160009054906101000a900460ff161515146140e257600080fd5b6000600f60008481526020019081526020016000209050600115158160000160009054906101000a900460ff161515141561411c57600080fd5b60405180608001604052806000151581526020013373ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815250600e600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010155606082015181600201559050507fbea0e66c2d42b9131695ceea7d1aaa21b37e93070cde19c9b5fbd686a3259292836040518082815260200191505060405180910390a1505050565b6000600e60008381526020019081526020016000209050600115158160000160009054906101000a900460ff1615151461425e57600080fd5b8060020154421061426e57600080fd5b6000600f60008481526020019081526020016000209050600115158160000160009054906101000a900460ff161515146142a757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461430357600080fd5b60008160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008360000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006103e86143626117c9565b8560010154028161436f57fe5b0490508273ffffffffffffffffffffffffffffffffffffffff166108fc828660010154039081150290604051600060405180830381858888f193505050501580156143be573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614405573d6000803e3d6000fd5b506040518060600160405280600015158152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250600f600088815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600101559050507f7687efe94566d20f7ebb8eff43bb57b2c014749dfd9ad179089e58c338ecdfa7866040518082815260200191505060405180910390a1505050505050565b61450d848484613671565b61451984848484614d00565b61452257600080fd5b50505050565b6000600e60008381526020019081526020016000209050806002015442101561455057600080fd5b600115158160000160009054906101000a900460ff1615151461457257600080fd5b600061457d83613d66565b90506000600f600085815260200190815260200160002090506145e98360000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686613671565b60006103e86145f66125a6565b8360010154028161460357fe5b04905060008183600101540390508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614657573d6000803e3d6000fd5b506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156146c5573d6000803e3d6000fd5b507fc87036081503cc1fd53dc456ee0c40aef140882f77b06b4b4b554fee2b60816a878560010154604051808381526020018281526020019250505060405180910390a161471287613836565b50505050505050565b60606000821415614763576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061485d565b600082905060005b6000821461478d578080600101915050600a828161478557fe5b04915061476b565b60008167ffffffffffffffff811180156147a657600080fd5b506040519080825280601f01601f1916602001820160405280156147d95781602001600182028036833780820191505090505b50905060006001830390508593505b6000841461485557600a84816147fa57fe5b0660300160f81b8282806001900393508151811061481457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a848161484d57fe5b0493506147e8565b819450505050505b919050565b60006012600083815260200190815260200160002060009054906101000a900460ff16905061489082613456565b61489957600080fd5b806148a357600080fd5b60116000838152602001908152602001600020543410156148c357600080fd5b6148cc82611da1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561490457600080fd5b5050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000339050600061493f84611da1565b905061494c818386613671565b60006103e86149596125a6565b6011600088815260200190815260200160002054028161497557fe5b04905060008160116000888152602001908152602001600020540390508273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156149d8573d6000803e3d6000fd5b508473ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015614a1f573d6000803e3d6000fd5b506011600087815260200190815260200160002054341115614a98578373ffffffffffffffffffffffffffffffffffffffff166108fc601160008981526020019081526020016000205434039081150290604051600060405180830381858888f19350505050158015614a96573d6000803e3d6000fd5b505b60006012600088815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050565b6000614ade836000018360001b614f19565b905092915050565b600081600001805490509050919050565b614aff611d8a565b15614b0957600080fd5b505050565b6000614b20836000018360001b614f3c565b905092915050565b6000614b3a836000018360001b615024565b905092915050565b6000614b6e846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b615094565b90509392505050565b600081836000018054905011614bd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158206022913960400191505060405180910390fd5b826000018281548110614be757fe5b9060005260206000200154905092915050565b6000614c0c836000018360001b615170565b905092915050565b60008082846000018054905011614c76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158c96022913960400191505060405180910390fd5b6000846000018481548110614c8757fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b6000614cbf836000018360001b615289565b60001c905092915050565b600081600001805490509050919050565b614ce58383615348565b614cf26000848484614d00565b614cfb57600080fd5b505050565b6000614d218473ffffffffffffffffffffffffffffffffffffffff1661546a565b614d2e5760019050614f11565b6000614e9863150b7a0260e01b614d43613473565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614dc7578082015181840152602081019050614dac565b50505050905090810190601f168015614df45780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001615842603291398773ffffffffffffffffffffffffffffffffffffffff1661547d9092919063ffffffff16565b90506000818060200190516020811015614eb157600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050505b949350505050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020549050600081146150185760006001820390506000600186600001805490500390506000866000018281548110614f8757fe5b9060005260206000200154905080876000018481548110614fa457fe5b9060005260206000200181905550600183018760010160008381526020019081526020016000208190555086600001805480614fdc57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061501e565b60009150505b92915050565b60006150308383615495565b61508957826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061508e565b600090505b92915050565b600080846001016000858152602001908152602001600020549050600081141561513b57846000016040518060400160405280868152602001858152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550508460000180549050856001016000868152602001908152602001600020819055506001915050615169565b8285600001600183038154811061514e57fe5b90600052602060002090600202016001018190555060009150505b9392505050565b6000808360010160008481526020019081526020016000205490506000811461527d57600060018203905060006001866000018054905003905060008660000182815481106151bb57fe5b90600052602060002090600202019050808760000184815481106151db57fe5b906000526020600020906002020160008201548160000155600182015481600101559050506001830187600101600083600001548152602001908152602001600020819055508660000180548061522e57fe5b6001900381819060005260206000209060020201600080820160009055600182016000905550509055866001016000878152602001908152602001600020600090556001945050505050615283565b60009150505b92915050565b600080836001016000848152602001908152602001600020549050600081141561531b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f456e756d657261626c654d61703a206e6f6e6578697374656e74206b6579000081525060200191505060405180910390fd5b83600001600182038154811061532d57fe5b90600052602060002090600202016001015491505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561538257600080fd5b61538b81613456565b1561539557600080fd5b6153a160008383614af7565b6153f281600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614b2890919063ffffffff16565b5061540981836005614b429092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b606061548c84846000856154b8565b90509392505050565b600080836001016000848152602001908152602001600020541415905092915050565b606082471015615513576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806158746026913960400191505060405180910390fd5b61551c8561546a565b61558e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106155dd57805182526020820191506020810190506020830392506155ba565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461563f576040519150601f19603f3d011682016040523d82523d6000602084013e615644565b606091505b5091509150615654828286615660565b92505050949350505050565b6060831561567057829050615725565b6000835111156156835782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156156ea5780820151818401526020810190506156cf565b50505050905090810190601f1680156157175780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b9392505050565b50805460018160011615610100020316600290046000825580601f106157525750615771565b601f0160209004906000526020600020908101906157709190615802565b5b50565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826157aa57600085556157f1565b82601f106157c357805160ff19168380011785556157f1565b828001600101855582156157f1579182015b828111156157f05782518255916020019190600101906157d5565b5b5090506157fe9190615802565b5090565b5b8082111561581b576000816000905550600101615803565b509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4f776e61626c65203a2046756e6374696f6e2063616c6c656420627920756e617574686f72697a656420757365722e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644f776e61626c652f7472616e736665724f776e657273686970203a2063616e6e6f74207472616e73666572206f776e65727368697020746f207a65726f2061646472657373a26469706673582212209773c6821252322ac378e301c14f196e7e72b4481780800ce0e74de1e487570464736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000008424c4f434b53444b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008424c4f434b53444b000000000000000000000000000000000000000000000000
-----Decoded View---------------
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 424c4f434b53444b000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 424c4f434b53444b000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
52772:1269:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4021:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42228:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40285:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42450:270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41616:117;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43363:245;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49451:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34119:104;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;49405:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;41925:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33850:157;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33068:119;;;;;;;;;;;;;:::i;:::-;;43680:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;48834:510;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44565:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53740:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34816:119;;;;;;;;;;;;;:::i;:::-;;41744:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34017:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40652:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32635:86;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42096:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40761:97;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40468:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1299:130;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;49940:402;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;51578:345;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32943:117;;;;;;;;;;;;;:::i;:::-;;52912:449;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44490:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;892:102;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42336:104;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53630:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53833:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33701:139;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34691:117;;;;;;;;;;;;;:::i;:::-;;51932:341;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42793:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43953:282;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53943:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49493:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;52283:477;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40867:741;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35094:143;;;;;;;;;;;;;:::i;:::-;;53387:220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34945:141;;;;;;;;;;;;;:::i;:::-;;50351:273;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43131:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48572:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1002:289;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4021:150;4106:4;4130:20;:33;4151:11;4130:33;;;;;;;;;;;;;;;;;;;;;;;;;;;4123:40;;4021:150;;;:::o;42228:100::-;42282:13;42315:5;42308:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42228:100;:::o;40285:173::-;40361:7;40389:16;40397:7;40389;:16::i;:::-;40381:25;;;;;;40426:15;:24;40442:7;40426:24;;;;;;;;;;;;;;;;;;;;;40419:31;;40285:173;;;:::o;42450:270::-;42531:13;42547:16;42555:7;42547;:16::i;:::-;42531:32;;42588:5;42582:11;;:2;:11;;;;42574:20;;;;;;42631:5;42615:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;42640:37;42657:5;42664:12;:10;:12::i;:::-;42640:16;:37::i;:::-;42615:62;42607:71;;;;;;42691:21;42700:2;42704:7;42691:8;:21::i;:::-;42450:270;;;:::o;41616:117::-;41677:7;41704:21;:12;:19;:21::i;:::-;41697:28;;41616:117;:::o;43363:245::-;43471:41;43490:12;:10;:12::i;:::-;43504:7;43471:18;:41::i;:::-;43463:50;;;;;;43551:5;43528:28;;:19;43539:7;43528:10;:19::i;:::-;:28;;;43520:37;;;;;;43572:28;43582:4;43588:2;43592:7;43572:9;:28::i;:::-;43363:245;;;:::o;49451:35::-;;;;;;;;;;;;;;;;;:::o;34119:104::-;34175:4;34199:16;;;;;;;;;;;34192:23;;34119:104;:::o;49405:37::-;;;;;;;;;;;;;:::o;41925:162::-;42022:7;42049:30;42073:5;42049:13;:20;42063:5;42049:20;;;;;;;;;;;;;;;:23;;:30;;;;:::i;:::-;42042:37;;41925:162;;;;:::o;33850:157::-;33904:4;33939;33918:25;;:17;:15;:17::i;:::-;:25;;;33915:49;;;33957:1;33950:8;;;;33915:49;33985:14;;33978:21;;33850:157;;:::o;33068:119::-;783:6;;;;;;;;;;;769:20;;:10;:20;;;747:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32876:8:::1;:6;:8::i;:::-;32868:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33136:5:::2;33126:7;;:15;;;;;;;;;;;;;;;;;;33157:22;33166:12;:10;:12::i;:::-;33157:22;;;;;;;;;;;;;;;;;;;;33068:119::o:0;43680:201::-;43811:5;43788:28;;:19;43799:7;43788:10;:19::i;:::-;:28;;;43780:37;;;;;;43834:39;43851:4;43857:2;43861:7;43834:39;;;;;;;;;;;;:16;:39::i;:::-;43680:201;;;:::o;48834:510::-;48901:42;48920:12;:10;:12::i;:::-;48934:8;48901:18;:42::i;:::-;:68;;;;48957:12;:10;:12::i;:::-;48947:22;;:6;;;;;;;;;;;:22;;;48901:68;48893:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49033:19;49056:6;:16;49063:8;49056:16;;;;;;;;;;;49033:39;;49099:4;49080:23;;:5;:15;;;;;;;;;;;;:23;;;49077:228;;;49115:15;49133:4;:14;49138:8;49133:14;;;;;;;;;;;49115:32;;49170:4;49156:18;;:3;:10;;;;;;;;;;;;:18;;;49153:113;;;49182:22;49215:3;:10;;;;;;;;;;;;49182:44;;49233:6;:15;;:26;49249:3;:9;;;49233:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49153:113;;49276:23;49290:8;49276:13;:23::i;:::-;49077:228;;49321:15;49327:8;49321:5;:15::i;:::-;48834:510;;:::o;44565:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53740:69::-;53790:14;53795:8;53790:4;:14::i;:::-;53740:69;:::o;34816:119::-;783:6;;;;;;;;;;;769:20;;:10;:20;;;747:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34384:11:::1;:9;:11::i;:::-;34376:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34893:5:::2;34880:10;;:18;;;;;;;;;;;;;;;;;;34914:13;;;;;;;;;;34816:119::o:0;41744:172::-;41819:7;41840:15;41861:22;41877:5;41861:12;:15;;:22;;;;:::i;:::-;41839:44;;;41901:7;41894:14;;;41744:172;;;:::o;34017:92::-;34067:4;34091:10;;;;;;;;;;;34084:17;;34017:92;:::o;40652:99::-;40722:21;40734:8;40722:11;:21::i;:::-;40652:99;:::o;32635:86::-;32682:4;32706:7;;;;;;;;;;;32699:14;;32635:86;:::o;42096:124::-;42168:7;42195:17;42204:7;42195:8;:17::i;:::-;42188:24;;42096:124;;;:::o;40761:97::-;40809:13;40842:8;40835:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40761:97;:::o;40468:175::-;40540:7;40585:1;40568:19;;:5;:19;;;;40560:28;;;;;;40606:29;:13;:20;40620:5;40606:20;;;;;;;;;;;;;;;:27;:29::i;:::-;40599:36;;40468:175;;;:::o;1299:130::-;1356:12;783:6;;;;;;;;;;;769:20;;:10;:20;;;747:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1391:30:::1;1418:1;1391:18;:30::i;:::-;1381:40;;1299:130:::0;:::o;49940:402::-;50031:4;50048:13;50080:1;50064:13;:11;:13::i;:::-;:17;50048:33;;50110:6;50092:5;:15;50098:8;50092:15;;;;;;;;;;;:24;;;;50149:4;50127:9;:19;50137:8;50127:19;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;50166:31;50176:10;50188:8;50166:9;:31::i;:::-;50208:33;50221:8;50231:9;50208:12;:33::i;:::-;50266:10;50259:47;;;50278:6;50286:8;50296:9;50259:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50326:8;50319:15;;;49940:402;;;;;:::o;51578:345::-;51643:4;51688:5;51664:29;;:20;51675:8;51664:10;:20::i;:::-;:29;;;51656:38;;;;;;51707:13;51723:5;:15;51729:8;51723:15;;;;;;;;;;;;51707:31;;51771:17;51779:8;51771:7;:17::i;:::-;51757:31;;:10;:31;;;51749:40;;;;;;51818:6;51800:5;:15;51806:8;51800:15;;;;;;;;;;;:24;;;;51854:10;51842:51;;;51866:8;51876:6;51884:8;51842:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51911:4;51904:11;;;51578:345;;;;:::o;32943:117::-;783:6;;;;;;;;;;;769:20;;:10;:20;;;747:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32776:8:::1;:6;:8::i;:::-;32775:9;32767:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33012:4:::2;33002:7:::0;::::2;:14;;;;;;;;;;;;;;;;;;33032:20;33039:12;:10;:12::i;:::-;33032:20;;;;;;;;;;;;;;;;;;;;32943:117::o:0;52912:449::-;53027:4;53044:13;53076:1;53060:13;:11;:13::i;:::-;:17;53044:33;;53106:9;53088:5;:15;53094:8;53088:15;;;;;;;;;;;:27;;;;53128:31;53138:10;53150:8;53128:9;:31::i;:::-;53170:33;53183:8;53193:9;53170:12;:33::i;:::-;53228:10;53221:50;;;53240:9;53251:8;53261:9;53221:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53280:47;53295:8;53304:9;53314:12;53280:14;:47::i;:::-;53345:8;53338:15;;;52912:449;;;;;;:::o;44490:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;892:102::-;932:20;980:6;;;;;;;;;;;965:21;;892:102;:::o;42336:104::-;42392:13;42425:7;42418:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42336:104;:::o;53630:92::-;53693:24;53708:8;53693:14;:24::i;:::-;53630:92;:::o;53833:85::-;53893:20;53904:8;53893:10;:20::i;:::-;53833:85;:::o;33701:139::-;33749:4;33778;33763:19;;:11;:9;:11::i;:::-;:19;;;33760:43;;;33796:1;33789:8;;;;33760:43;33824:8;;33817:15;;33701:139;;:::o;34691:117::-;783:6;;;;;;;;;;;769:20;;:10;:20;;;747:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34280:11:::1;:9;:11::i;:::-;34279:12;34271:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34769:4:::2;34756:10;;:17;;;;;;;;;;;;;;;;;;34789:11;;;;;;;;;;34691:117::o:0;51932:341::-;52013:4;52052:17;52060:8;52052:7;:17::i;:::-;52038:31;;:10;:31;;;52030:40;;;;;;52115:5;52091:29;;:20;52102:8;52091:10;:20::i;:::-;:29;;;52083:38;;;;;;52158:14;52136:9;:19;52146:8;52136:19;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;52204:10;52190:51;;;52216:8;52226:14;52190:51;;;;;;;;;;;;;;;;;;;;;;;;;;52261:4;52254:11;;51932:341;;;;:::o;42793:266::-;42908:12;:10;:12::i;:::-;42896:24;;:8;:24;;;;42888:33;;;;;;42979:8;42934:18;:32;42953:12;:10;:12::i;:::-;42934:32;;;;;;;;;;;;;;;:42;42967:8;42934:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;43032:8;43003:48;;43018:12;:10;:12::i;:::-;43003:48;;;43042:8;43003:48;;;;;;;;;;;;;;;;;;;;42793:266;;:::o;43953:282::-;44085:41;44104:12;:10;:12::i;:::-;44118:7;44085:18;:41::i;:::-;44077:50;;;;;;44165:5;44142:28;;:19;44153:7;44142:10;:19::i;:::-;:28;;;44134:37;;;;;;44188:39;44202:4;44208:2;44212:7;44221:5;44188:13;:39::i;:::-;43953:282;;;;:::o;53943:87::-;54004:21;54016:8;54004:11;:21::i;:::-;53943:87;:::o;49493:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;52283:477::-;52353:4;52398:5;52374:29;;:20;52385:8;52374:10;:20::i;:::-;:29;;;52366:38;;;;;;52417:13;52433:5;:15;52439:8;52433:15;;;;;;;;;;;;52417:31;;52481:17;52489:8;52481:7;:17::i;:::-;52467:31;;:10;:31;;;52459:40;;;;;;52532:6;52514:5;:15;52520:8;52514:15;;;;;;;;;;;:24;;;;52562:10;52548:41;;;52574:8;52584:4;52548:41;;;;;;;;;;;;;;;;;;;;;;;;;;52625:4;52602:27;;:9;:19;52612:8;52602:19;;;;;;;;;;;;;;;;;;;;;:27;;;52598:133;;52659:4;52637:9;:19;52647:8;52637:19;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;52686:10;52674:51;;;52698:8;52708:6;52716:8;52674:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52598:133;52748:4;52741:11;;;52283:477;;;;:::o;40867:741::-;40940:13;40974:16;40982:7;40974;:16::i;:::-;40966:25;;;;;;41004:23;41030:10;:19;41041:7;41030:19;;;;;;;;;;;41004:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41060:18;41081:9;:7;:9::i;:::-;41060:30;;41188:1;41172:4;41166:18;:23;41162:72;;;41213:9;41206:16;;;;;;41162:72;41364:1;41344:9;41338:23;:27;41334:108;;;41413:4;41419:9;41396:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41382:48;;;;;;41334:108;41574:4;41580:18;:7;:16;:18::i;:::-;41557:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41543:57;;;;40867:741;;;;:::o;35094:143::-;783:6;;;;;;;;;;;769:20;;:10;:20;;;747:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34620:17:::1;:15;:17::i;:::-;34612:50;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35189:5:::2;35170:16;;:24;;;;;;;;;;;;;;;;;;35210:19;;;;;;;;;;35094:143::o:0;53387:220::-;53511:5;53488:28;;:9;:19;53498:8;53488:19;;;;;;;;;;;;;;;;;;;;;:28;;;53480:37;;;;;;53552:47;53567:8;53576:9;53586:12;53552:14;:47::i;:::-;53387:220;;;:::o;34945:141::-;783:6;;;;;;;;;;;769:20;;:10;:20;;;747:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34504:17:::1;:15;:17::i;:::-;34503:18;34495:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35041:4:::2;35022:16;;:23;;;;;;;;;;;;;;;;;;35061:17;;;;;;;;;;34945:141::o:0;50351:273::-;50402:14;50412:3;50402:9;:14::i;:::-;50429:22;50454:12;50462:3;50454:7;:12::i;:::-;50429:37;;50477:17;50497:10;50477:30;;50520:11;50527:3;50520:6;:11::i;:::-;50574:9;50549:67;;50558:14;50549:67;;;50585:5;:10;50591:3;50585:10;;;;;;;;;;;;50597:3;50602:13;50611:3;50602:8;:13::i;:::-;50549:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50351:273;;;:::o;43131:164::-;43228:4;43252:18;:25;43271:5;43252:25;;;;;;;;;;;;;;;:35;43278:8;43252:35;;;;;;;;;;;;;;;;;;;;;;;;;43245:42;;43131:164;;;;:::o;48572:196::-;48639:4;48649:19;48672:6;:16;48679:8;48672:16;;;;;;;;;;;48649:39;;48715:4;48696:23;;:5;:15;;;;;;;;;;;;:23;;;48693:51;;48733:5;48726:12;;;;;48693:51;48759:4;48752:11;;;48572:196;;;;:::o;1002:289::-;1100:12;783:6;;;;;;;;;;;769:20;;:10;:20;;;747:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1158:1:::1;1138:22;;:8;:22;;;;1130:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1255:28;1274:8;1255:18;:28::i;:::-;1245:38;;1002:289:::0;;;:::o;36983:127::-;37048:4;37072:30;37094:7;37072:12;:21;;:30;;;;:::i;:::-;37065:37;;36983:127;;;:::o;68:98::-;121:7;148:10;141:17;;68:98;:::o;39964:178::-;40058:2;40031:15;:24;40047:7;40031:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40108:7;40104:2;40076:40;;40085:17;40094:7;40085:8;:17::i;:::-;40076:40;;;;;;;;;;;;39964:178;;:::o;29576:123::-;29645:7;29672:19;29680:3;:10;;29672:7;:19::i;:::-;29665:26;;29576:123;;;:::o;37118:296::-;37211:4;37236:16;37244:7;37236;:16::i;:::-;37228:25;;;;;;37264:13;37280:17;37289:7;37280:8;:17::i;:::-;37264:33;;37327:5;37316:16;;:7;:16;;;:51;;;;37360:7;37336:31;;:20;37348:7;37336:11;:20::i;:::-;:31;;;37316:51;:89;;;;37371:18;:25;37390:5;37371:25;;;;;;;;;;;;;;;:34;37397:7;37371:34;;;;;;;;;;;;;;;;;;;;;;;;;37316:89;37308:98;;;37118:296;;;;:::o;38571:490::-;38690:4;38669:25;;:17;38678:7;38669:8;:17::i;:::-;:25;;;38661:34;;;;;;38728:1;38714:16;;:2;:16;;;;38706:25;;;;;;38744:39;38765:4;38771:2;38775:7;38744:20;:39::i;:::-;38848:29;38865:1;38869:7;38848:8;:29::i;:::-;38890:35;38917:7;38890:13;:19;38904:4;38890:19;;;;;;;;;;;;;;;:26;;:35;;;;:::i;:::-;;38936:30;38958:7;38936:13;:17;38950:2;38936:17;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;;38979:29;38996:7;39005:2;38979:12;:16;;:29;;;;;:::i;:::-;;39045:7;39041:2;39026:27;;39035:4;39026:27;;;;;;;;;;;;38571:490;;;:::o;22186:137::-;22257:7;22292:22;22296:3;:10;;22308:5;22292:3;:22::i;:::-;22284:31;;22277:38;;22186:137;;;;:::o;48388:175::-;48476:29;;;;;;;;48482:5;48476:29;;;;;;48497:1;48476:29;;;;;;48501:1;48476:29;;;;48503:1;48476:29;;;48457:6;:16;48464:8;48457:16;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48533:25;;;;;;;;48537:5;48533:25;;;;;;48552:1;48533:25;;;;;;48556:1;48533:25;;;48516:4;:14;48521:8;48516:14;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48388:175;:::o;38088:475::-;38148:13;38164:17;38173:7;38164:8;:17::i;:::-;38148:33;;38212:48;38233:5;38248:1;38252:7;38212:20;:48::i;:::-;38273:29;38290:1;38294:7;38273:8;:29::i;:::-;38356:1;38325:10;:19;38336:7;38325:19;;;;;;;;;;;38319:33;;;;;;;;;;;;;;;;:38;38315:97;;38381:10;:19;38392:7;38381:19;;;;;;;;;;;;38374:26;;;;:::i;:::-;38315:97;38424:36;38452:7;38424:13;:20;38438:5;38424:20;;;;;;;;;;;;;;;:27;;:36;;;;:::i;:::-;;38473:28;38493:7;38473:12;:19;;:28;;;;:::i;:::-;;38547:7;38543:1;38519:36;;38528:5;38519:36;;;;;;;;;;;;38088:475;;:::o;45910:817::-;45994:10;45972:32;;:18;45981:8;45972;:18::i;:::-;:32;;;;45964:41;;;;;;46032:19;46055:6;:16;46062:8;46055:16;;;;;;;;;;;46032:39;;46102:5;:13;;;46084:15;:31;46076:40;;;;;;46176:5;:14;;;46163:9;:27;;46155:36;;;;;;46264:20;46287:4;:14;46292:8;46287:14;;;;;;;;;;;46264:37;;46326:8;:14;;;46314:9;:26;46306:35;;;;;;46453:1;46436:8;:14;;;:18;46432:183;;;46517:22;46550:8;:15;;;;;;;;;;;;46517:49;;46572:6;:15;;:31;46588:8;:14;;;46572:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46432:183;;46646:32;;;;;;;;46650:4;46646:32;;;;;;46656:10;46646:32;;;;;;46668:9;46646:32;;;46629:4;:14;46634:8;46629:14;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46692:27;46700:8;46709:9;46692:27;;;;;;;;;;;;;;;;;;;;;;;;45910:817;;;:::o;30039:236::-;30119:7;30128;30149:11;30162:13;30179:22;30183:3;:10;;30195:5;30179:3;:22::i;:::-;30148:53;;;;30228:3;30220:12;;30258:5;30250:14;;30212:55;;;;;;30039:236;;;;;:::o;39244:100::-;39328:8;39317;:19;;;;;;;;;;;;:::i;:::-;;39244:100;:::o;36622:126::-;36688:7;36715:25;36732:7;36715:12;:16;;:25;;;;:::i;:::-;36708:32;;36622:126;;;:::o;21727:114::-;21787:7;21814:19;21822:3;:10;;21814:7;:19::i;:::-;21807:26;;21727:114;;;:::o;1437:193::-;1501:12;1560:8;1531:38;;1552:6;;;;;;;;;;;1531:38;;;;;;;;;;;;1589:8;1580:6;;:17;;;;;;;;;;;;;;;;;;1618:4;1608:14;;1437:193;;;:::o;37422:110::-;37498:26;37508:2;37512:7;37498:26;;;;;;;;;;;;:9;:26::i;:::-;37422:110;;:::o;39069:167::-;39169:16;39177:7;39169;:16::i;:::-;39161:25;;;;;;39219:9;39197:10;:19;39208:7;39197:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;39069:167;;:::o;44882:477::-;45010:10;44988:32;;:18;44997:8;44988;:18::i;:::-;:32;;;44980:41;;;;;;45061:19;45084:6;:16;45091:8;45084:16;;;;;;;;;;;45061:39;;45132:4;45113:23;;:5;:15;;;;;;;;;;;;:23;;;;45105:32;;;;;;45202:65;;;;;;;;45208:4;45202:65;;;;;;45214:10;45202:65;;;;;;45226:9;45202:65;;;;45254:12;45236:15;:30;45202:65;;;45183:6;:16;45190:8;45183:16;;;;;;;;;;;:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45291:10;45277:77;;;45303:8;45313:9;45341:12;45323:15;:30;45277:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44882:477;;;;:::o;45385:499::-;45484:10;45462:32;;:18;45471:8;45462;:18::i;:::-;:32;;;45454:41;;;;;;45539:19;45562:6;:16;45569:8;45562:16;;;;;;;;;;;45539:39;;45612:4;45593:23;;:5;:15;;;;;;;;;;;;:23;;;45585:32;;;;;;45661:15;45679:4;:14;45684:8;45679:14;;;;;;;;;;;45661:32;;45722:4;45708:18;;:3;:10;;;;;;;;;;;;:18;;;;45700:27;;;;;;45806:29;;;;;;;;45812:5;45806:29;;;;;;45819:10;45806:29;;;;;;45831:1;45806:29;;;;45833:1;45806:29;;;45787:6;:16;45794:8;45787:16;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45853:23;45867:8;45853:23;;;;;;;;;;;;;;;;;;45385:499;;;:::o;46754:740::-;46814:19;46837:6;:16;46844:8;46837:16;;;;;;;;;;;46814:39;;46885:4;46866:23;;:5;:15;;;;;;;;;;;;:23;;;46858:32;;;;;;46955:5;:13;;;46937:15;:31;46929:40;;;;;;47016:15;47034:4;:14;47039:8;47034:14;;;;;;;;;;;47016:32;;47075:4;47061:18;;:3;:10;;;;;;;;;;;;:18;;;47053:27;;;;;;47107:10;47093:24;;:3;:10;;;;;;;;;;;;:24;;;47085:33;;;;;;47166:22;47199:3;:10;;;;;;;;;;;;47166:44;;47215:22;47248:5;:12;;;;;;;;;;;;47215:46;;47273:14;47320:4;47302:15;:13;:15::i;:::-;47290:3;:9;;;:27;:34;;;;;;47273:51;;47330:6;:15;;:38;47358:9;47346:3;:9;;;:21;47330:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47374:6;:15;;:26;47390:9;47374:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47428:25;;;;;;;;47432:5;47428:25;;;;;;47447:1;47428:25;;;;;;47451:1;47428:25;;;47411:4;:14;47416:8;47411:14;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47467:19;47477:8;47467:19;;;;;;;;;;;;;;;;;;46754:740;;;;;;:::o;36757:218::-;36871:28;36881:4;36887:2;36891:7;36871:9;:28::i;:::-;36918:48;36941:4;36947:2;36951:7;36960:5;36918:22;:48::i;:::-;36910:57;;;;;;36757:218;;;;:::o;47520:858::-;47587:19;47610:6;:16;47617:8;47610:16;;;;;;;;;;;47587:39;;47658:5;:13;;;47639:15;:32;;47631:41;;;;;;47749:4;47730:23;;:5;:15;;;;;;;;;;;;:23;;;47722:32;;;;;;47798:22;47831:18;47840:8;47831;:18::i;:::-;47798:52;;47859:15;47877:4;:14;47882:8;47877:14;;;;;;;;;;;47859:32;;47896:45;47906:5;:12;;;;;;;;;;;;47920:3;:10;;;;;;;;;;;;47932:8;47896:9;:45::i;:::-;47978:21;48026:4;48014:9;:7;:9::i;:::-;48002:3;:9;;;:21;:28;;;;;;47978:52;;48036:17;48068:16;48056:3;:9;;;:28;48036:48;;48095:6;:15;;:29;48111:12;48095:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48172;48212:6;;;;;;;;;;;48172:47;;48225:13;:22;;:40;48248:16;48225:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48315:30;48326:8;48335:3;:9;;;48315:30;;;;;;;;;;;;;;;;;;;;;;;;48350:23;48364:8;48350:13;:23::i;:::-;47520:858;;;;;;;:::o;31660:746::-;31716:13;31946:1;31937:5;:10;31933:53;;;31964:10;;;;;;;;;;;;;;;;;;;;;31933:53;31996:12;32011:5;31996:20;;32027:14;32052:78;32067:1;32059:4;:9;32052:78;;32085:8;;;;;;;32116:2;32108:10;;;;;;;;;32052:78;;;32140:19;32172:6;32162:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32140:39;;32190:13;32215:1;32206:6;:10;32190:26;;32234:5;32227:12;;32250:117;32265:1;32257:4;:9;32250:117;;32326:2;32319:4;:9;;;;;;32314:2;:14;32301:29;;32283:6;32290:7;;;;;;;32283:15;;;;;;;;;;;:47;;;;;;;;;;;32353:2;32345:10;;;;;;;;;32250:117;;;32391:6;32377:21;;;;;;31660:746;;;;:::o;50632:244::-;50681:17;50701:9;:14;50711:3;50701:14;;;;;;;;;;;;;;;;;;;;;50681:34;;50734:12;50742:3;50734:7;:12::i;:::-;50726:21;;;;;;50766:12;50758:21;;;;;;50811:5;:10;50817:3;50811:10;;;;;;;;;;;;50798:9;:23;;50790:32;;;;;;50855:12;50863:3;50855:7;:12::i;:::-;50841:26;;:10;:26;;;;50833:35;;;;;;50632:244;;:::o;50884:685::-;50930:29;50970:6;;;;;;;;;;;50930:47;;50988:22;51021:10;50988:44;;51043:22;51076:12;51084:3;51076:7;:12::i;:::-;51043:46;;51102:30;51112:6;51120;51128:3;51102:9;:30::i;:::-;51146:21;51195:4;51183:9;:7;:9::i;:::-;51170:5;:10;51176:3;51170:10;;;;;;;;;;;;:22;:29;;;;;;51146:53;;51205:17;51238:16;51225:5;:10;51231:3;51225:10;;;;;;;;;;;;:29;51205:49;;51262:6;:15;;:29;51278:12;51262:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51297:13;:22;;:40;51320:16;51297:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51449:5;:10;51455:3;51449:10;;;;;;;;;;;;51437:9;:22;51433:94;;;51476:6;:15;;:39;51504:5;:10;51510:3;51504:10;;;;;;;;;;;;51492:9;:22;51476:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51433:94;51556:5;51539:9;:14;51549:3;51539:14;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;50884:685;;;;;;:::o;29336:151::-;29420:4;29444:35;29454:3;:10;;29474:3;29466:12;;29444:9;:35::i;:::-;29437:42;;29336:151;;;;:::o;26147:110::-;26203:7;26230:3;:12;;:19;;;;26223:26;;26147:110;;;:::o;40149:120::-;40254:8;:6;:8::i;:::-;40253:9;40245:18;;;;;;40149:120;;;:::o;21270:137::-;21340:4;21364:35;21372:3;:10;;21392:5;21384:14;;21364:7;:35::i;:::-;21357:42;;21270:137;;;;:::o;20962:131::-;21029:4;21053:32;21058:3;:10;;21078:5;21070:14;;21053:4;:32::i;:::-;21046:39;;20962:131;;;;:::o;28757:185::-;28846:4;28870:64;28875:3;:10;;28895:3;28887:12;;28925:5;28909:23;;28901:32;;28870:4;:64::i;:::-;28863:71;;28757:185;;;;;:::o;17209:204::-;17276:7;17325:5;17304:3;:11;;:18;;;;:26;17296:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17387:3;:11;;17399:5;17387:18;;;;;;;;;;;;;;;;17380:25;;17209:204;;;;:::o;29109:142::-;29186:4;29210:33;29218:3;:10;;29238:3;29230:12;;29210:7;:33::i;:::-;29203:40;;29109:142;;;;:::o;26613:279::-;26680:7;26689;26739:5;26717:3;:12;;:19;;;;:27;26709:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26796:22;26821:3;:12;;26834:5;26821:19;;;;;;;;;;;;;;;;;;26796:44;;26859:5;:10;;;26871:5;:12;;;26851:33;;;;;26613:279;;;;;:::o;30868:171::-;30947:7;30998:30;31003:3;:10;;31023:3;31015:12;;30998:4;:30::i;:::-;30990:39;;30967:64;;30868:171;;;;:::o;16755:109::-;16811:7;16838:3;:11;;:18;;;;16831:25;;16755:109;;;:::o;37540:196::-;37636:18;37642:2;37646:7;37636:5;:18::i;:::-;37673:54;37704:1;37708:2;37712:7;37721:5;37673:22;:54::i;:::-;37665:63;;;;;;37540:196;;;:::o;39352:604::-;39473:4;39500:15;:2;:13;;;:15::i;:::-;39495:60;;39539:4;39532:11;;;;39495:60;39565:23;39591:252;39644:45;;;39704:12;:10;:12::i;:::-;39731:4;39750:7;39772:5;39607:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39591:252;;;;;;;;;;;;;;;;;:2;:15;;;;:252;;;;;:::i;:::-;39565:278;;39854:13;39881:10;39870:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39854:48;;35685:10;39931:16;;39921:26;;;:6;:26;;;;39913:35;;;;39352:604;;;;;;;:::o;25926:125::-;25997:4;26042:1;26021:3;:12;;:17;26034:3;26021:17;;;;;;;;;;;;:22;;26014:29;;25926:125;;;;:::o;14908:1544::-;14974:4;15092:18;15113:3;:12;;:19;15126:5;15113:19;;;;;;;;;;;;15092:40;;15163:1;15149:10;:15;15145:1300;;15511:21;15548:1;15535:10;:14;15511:38;;15564:17;15605:1;15584:3;:11;;:18;;;;:22;15564:42;;15851:17;15871:3;:11;;15883:9;15871:22;;;;;;;;;;;;;;;;15851:42;;16017:9;15988:3;:11;;16000:13;15988:26;;;;;;;;;;;;;;;:38;;;;16136:1;16120:13;:17;16094:3;:12;;:23;16107:9;16094:23;;;;;;;;;;;:43;;;;16246:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;16341:3;:12;;:19;16354:5;16341:19;;;;;;;;;;;16334:26;;;16384:4;16377:11;;;;;;;;15145:1300;16428:5;16421:12;;;14908:1544;;;;;:::o;14317:414::-;14380:4;14402:21;14412:3;14417:5;14402:9;:21::i;:::-;14397:327;;14440:3;:11;;14457:5;14440:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14623:3;:11;;:18;;;;14601:3;:12;;:19;14614:5;14601:19;;;;;;;;;;;:40;;;;14663:4;14656:11;;;;14397:327;14707:5;14700:12;;14317:414;;;;;:::o;23424:692::-;23500:4;23616:16;23635:3;:12;;:17;23648:3;23635:17;;;;;;;;;;;;23616:36;;23681:1;23669:8;:13;23665:444;;;23736:3;:12;;23754:38;;;;;;;;23771:3;23754:38;;;;23784:5;23754:38;;;23736:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23951:3;:12;;:19;;;;23931:3;:12;;:17;23944:3;23931:17;;;;;;;;;;;:39;;;;23992:4;23985:11;;;;;23665:444;24065:5;24029:3;:12;;24053:1;24042:8;:12;24029:26;;;;;;;;;;;;;;;;;;:33;;:41;;;;24092:5;24085:12;;;23424:692;;;;;;:::o;24292:1549::-;24356:4;24472:16;24491:3;:12;;:17;24504:3;24491:17;;;;;;;;;;;;24472:36;;24537:1;24525:8;:13;24521:1313;;24886:21;24921:1;24910:8;:12;24886:36;;24937:17;24979:1;24957:3;:12;;:19;;;;:23;24937:43;;25225:26;25254:3;:12;;25267:9;25254:23;;;;;;;;;;;;;;;;;;25225:52;;25402:9;25372:3;:12;;25385:13;25372:27;;;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;;25526:1;25510:13;:17;25479:3;:12;;:28;25492:9;:14;;;25479:28;;;;;;;;;;;:48;;;;25636:3;:12;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25732:3;:12;;:17;25745:3;25732:17;;;;;;;;;;;25725:24;;;25773:4;25766:11;;;;;;;;24521:1313;25817:5;25810:12;;;24292:1549;;;;;:::o;27511:311::-;27577:7;27597:16;27616:3;:12;;:17;27629:3;27616:17;;;;;;;;;;;;27597:36;;27664:1;27652:8;:13;;27644:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27754:3;:12;;27778:1;27767:8;:12;27754:26;;;;;;;;;;;;;;;;;;:33;;;27747:40;;;27511:311;;;;:::o;37744:336::-;37838:1;37824:16;;:2;:16;;;;37816:25;;;;;;37861:16;37869:7;37861;:16::i;:::-;37860:17;37852:26;;;;;;37891:45;37920:1;37924:2;37928:7;37891:20;:45::i;:::-;37949:30;37971:7;37949:13;:17;37963:2;37949:17;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;;37992:29;38009:7;38018:2;37992:12;:16;;:29;;;;;:::i;:::-;;38064:7;38060:2;38039:33;;38056:1;38039:33;;;;;;;;;;;;37744:336;;:::o;11217:176::-;11277:4;11296:12;11350:7;11338:20;11330:28;;11384:1;11377:4;:8;11370:15;;;11217:176;;;:::o;11909:195::-;12012:12;12044:52;12066:6;12074:4;12080:1;12083:12;12044:21;:52::i;:::-;12037:59;;11909:195;;;;;:::o;16539:129::-;16612:4;16659:1;16636:3;:12;;:19;16649:5;16636:19;;;;;;;;;;;;:24;;16629:31;;16539:129;;;;:::o;12346:530::-;12473:12;12531:5;12506:21;:30;;12498:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12598:18;12609:6;12598:10;:18::i;:::-;12590:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12724:12;12738:23;12765:6;:11;;12785:5;12793:4;12765:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12723:75;;;;12816:52;12834:7;12843:10;12855:12;12816:17;:52::i;:::-;12809:59;;;;12346:530;;;;;;:::o;12884:515::-;12999:12;13028:7;13024:368;;;13059:10;13052:17;;;;13024:368;13126:1;13106:10;:17;:21;13102:279;;;13209:10;13203:17;13270:15;13257:10;13253:2;13249:19;13242:44;13157:148;13352:12;13345:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12884:515;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://9773c6821252322ac378e301c14f196e7e72b4481780800ce0e74de1e4875704
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,269.38 | 0.004 | $13.08 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.