0 txs
0 calls
constructor
constructor(address _okComputerNFT)
functions
allowTokenDataStoreCallback
viewfunction allowTokenDataStoreCallback() view returns (bool)
followerCount
viewfunction followerCount(uint256) view returns (uint256)
followingCount
viewfunction followingCount(uint256) view returns (uint256)
getBool
viewfunction getBool(uint256 tokenId, bytes32 key) view returns (bool)
getBoolOrDefault
viewfunction getBoolOrDefault(uint256 tokenId, bytes32 key, bool defaultValue) view returns (bool)
getData
viewfunction getData(uint256 tokenId, bytes32 key) view returns (bytes)
getDataLengthMax
viewfunction getDataLengthMax(bytes32 key) view returns (uint256)
getDataSubmitCooldown
viewfunction getDataSubmitCooldown(bytes32 key) view returns (uint256)
getInt
viewfunction getInt(uint256 tokenId, bytes32 key) view returns (int256)
getIntOrDefault
viewfunction getIntOrDefault(uint256 tokenId, bytes32 key, int256 defaultValue) view returns (int256)
getKey
purefunction getKey(string key) pure returns (bytes32)
getMessage
viewfunction getMessage(bytes32 key, uint256 index) view returns (tuple)
getMessageCount
viewfunction getMessageCount(bytes32 key) view returns (uint256)
getMessages
viewfunction getMessages(bytes32 key) view returns (tuple[])
getString
viewfunction getString(uint256 tokenId, bytes32 key) view returns (string)
getStringOrDefault
viewfunction getStringOrDefault(uint256 tokenId, bytes32 key, string defaultValue) view returns (string)
globalDataStoreCallback
viewfunction globalDataStoreCallback(bytes32) view returns (address)
globalMessageCallback
viewfunction globalMessageCallback(bytes32) view returns (address)
hasData
viewfunction hasData(uint256 tokenId, bytes32 key) view returns (bool)
isAdminTokenIdBlocked
viewfunction isAdminTokenIdBlocked(uint256 tokenId) view returns (bool)
isFollowing
viewfunction isFollowing(uint256, uint256) view returns (bool)
isMutualFriends
viewfunction isMutualFriends(uint256 tokenId1, uint256 tokenId2) view returns (bool)
MAX_SUPPLY
viewfunction MAX_SUPPLY() view returns (uint256)
okComputerNFT
viewfunction okComputerNFT() view returns (address)
owner
viewfunction owner() view returns (address result)
ownershipHandoverExpiresAt
viewfunction ownershipHandoverExpiresAt(address pendingOwner) view returns (uint256 result)
paused
viewfunction paused() view returns (bool)
tokenDataStoreCallback
viewfunction tokenDataStoreCallback(uint256, bytes32) view returns (address)
adminAddWriteOnlyKeys
nonpayablefunction adminAddWriteOnlyKeys(string[] keys)
adminRemoveWriteOnlyKeys
nonpayablefunction adminRemoveWriteOnlyKeys(string[] keys)
blockTokenIds
nonpayablefunction blockTokenIds(uint256[] tokenIds)
cancelOwnershipHandover
payablefunction cancelOwnershipHandover() payable
completeOwnershipHandover
payablefunction completeOwnershipHandover(address pendingOwner) payable
follow
nonpayablefunction follow(uint256 followerTokenId, uint256 followedTokenId)
registerGlobalDataStoreCallback
nonpayablefunction registerGlobalDataStoreCallback(bytes32 key, address callback)
registerGlobalMessageCallback
nonpayablefunction registerGlobalMessageCallback(bytes32 key, address callback)
registerTokenDataStoreCallback
nonpayablefunction registerTokenDataStoreCallback(uint256 tokenId, bytes32 key, address callback)
removeData
nonpayablefunction removeData(uint256 tokenId, bytes32 key)
removeDataMany
nonpayablefunction removeDataMany(uint256[] tokenIds, bytes32[] keys)
renounceOwnership
payablefunction renounceOwnership() payable
requestOwnershipHandover
payablefunction requestOwnershipHandover() payable
setAllowTokenDataStoreCallback
nonpayablefunction setAllowTokenDataStoreCallback(bool _allow)
setDataMaxLengthForKey
nonpayablefunction setDataMaxLengthForKey(bytes32 key, uint256 maxLength)
setDataMaxLengthForKeys
nonpayablefunction setDataMaxLengthForKeys(bytes32[] keys, uint256[] maxLengths)
setDataSubmitCooldownForKey
nonpayablefunction setDataSubmitCooldownForKey(bytes32 key, uint256 cooldown)
setDataSubmitCooldownForKeys
nonpayablefunction setDataSubmitCooldownForKeys(bytes32[] keys, uint256[] cooldowns)
setDefaultDataMaxLength
nonpayablefunction setDefaultDataMaxLength(uint256 _defaultDataMaxLength)
setDefaultSubmitCooldown
nonpayablefunction setDefaultSubmitCooldown(uint256 _defaultSubmitCooldown)
setPause
nonpayablefunction setPause(bool _paused)
storeBool
nonpayablefunction storeBool(uint256 tokenId, bytes32 key, bool data)
storeData
nonpayablefunction storeData(uint256 tokenId, bytes32 key, bytes data)
storeDataMany
nonpayablefunction storeDataMany(uint256[] tokenIds, bytes32[] keys, bytes[] data)
storeInt
nonpayablefunction storeInt(uint256 tokenId, bytes32 key, int256 data)
storeString
nonpayablefunction storeString(uint256 tokenId, bytes32 key, string data)
submitMessage
nonpayablefunction submitMessage(uint256 tokenId, bytes32 key, string text, uint256 metadata)
submitMessages
nonpayablefunction submitMessages(uint256[] tokenIds, bytes32[] keys, string[] messages, uint256[] metadata)
transferOwnership
payablefunction transferOwnership(address newOwner) payable
unblockTokenIds
nonpayablefunction unblockTokenIds(uint256[] tokenIds)
unfollow
nonpayablefunction unfollow(uint256 followerTokenId, uint256 followedTokenId)
events
AdminTokenIdBlocked
event AdminTokenIdBlocked(uint256 indexed tokenId)
AdminTokenIdUnblocked
event AdminTokenIdUnblocked(uint256 indexed tokenId)
AdminWriteOnlyKeyAdded
event AdminWriteOnlyKeyAdded(bytes32 indexed key)
AdminWriteOnlyKeyRemoved
event AdminWriteOnlyKeyRemoved(bytes32 indexed key)
CallbackFailure
event CallbackFailure(bytes32 indexed key, string functionName, address indexed callback)
DataRemoved
event DataRemoved(uint256 indexed tokenId, bytes32 indexed key, address indexed sender)
DataStoreCallbackRegistered
event DataStoreCallbackRegistered(uint256 tokenId, bytes32 key, address callback)
DataStored
event DataStored(uint256 indexed tokenId, bytes32 indexed key, address indexed sender, bytes data)
Follow
event Follow(uint256 indexed followerTokenId, uint256 indexed followedTokenId)
MessageCallbackRegistered
event MessageCallbackRegistered(bytes32 key, address callback)
MessageSubmitted
event MessageSubmitted(uint256 indexed tokenId, bytes32 indexed key, string message, uint256 metadata, address indexed sender)
MutualFriendEnd
event MutualFriendEnd(uint256 indexed tokenId1, uint256 indexed tokenId2)
MutualFriendStart
event MutualFriendStart(uint256 indexed tokenId1, uint256 indexed tokenId2)
OwnershipHandoverCanceled
event OwnershipHandoverCanceled(address indexed pendingOwner)
OwnershipHandoverRequested
event OwnershipHandoverRequested(address indexed pendingOwner)
OwnershipTransferred
event OwnershipTransferred(address indexed oldOwner, address indexed newOwner)
TokenDataStoreCallbackRegistered
event TokenDataStoreCallbackRegistered(uint256 tokenId, bytes32 key, address callback)
Unfollow
event Unfollow(uint256 indexed followerTokenId, uint256 indexed unfollowedTokenId)
errors
AlreadyInitialized
error AlreadyInitialized()
NewOwnerIsZeroAddress
error NewOwnerIsZeroAddress()
NoHandoverRequest
error NoHandoverRequest()
Unauthorized
error Unauthorized()
creation bytecode
0x60a060405261040060035560006004556005805461ffff191690553480156200002757600080fd5b5060405162004422380380620044228339810160408190526200004a916200036e565b60016000556001600160a01b038116608052620000673362000224565b60408051600380825260808201909252600091816020015b60608152602001906001900390816200007f5790505090506040518060400160405280601981526020017f68746d6c5f616c6c6f775f696e6c696e655f736372697074730000000000000081525081600081518110620000e357620000e3620003a0565b60200260200101819052506040518060400160405280601681526020017f68746d6c5f616c6c6f775f6578745f7363726970747300000000000000000000815250816001815181106200013a576200013a620003a0565b60200260200101819052506040518060400160405280601581526020017f68746d6c5f616c6c6f775f6578745f696d61676573000000000000000000000081525081600281518110620001915762000191620003a0565b6020908102919091010152620001a78162000260565b620001e2620001d960405180604001604052806005815260200164195b585a5b60da1b8152506200030260201b60201c565b61020062000334565b6200021c62000213604051806040016040528060048152602001637061676560e01b8152506200030260201b60201c565b61c80062000334565b50506200040f565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b6200026a62000350565b60005b8151811015620002fe576000620002a6838381518110620002925762000292620003a0565b60200260200101516200030260201b60201c565b600081815260026020526040808220805460ff191660011790555191925082917f0e1949172711d1709d2db1398a7675665a90abafb2c0c4e36d32f6117e98702f9190a250620002f681620003b6565b90506200026d565b5050565b600081604051602001620003179190620003de565b604051602081830303815290604052805190602001209050919050565b6200033e62000350565b60009182526006602052604090912055565b638b78c6d8195433146200036c576382b429006000526004601cfd5b565b6000602082840312156200038157600080fd5b81516001600160a01b03811681146200039957600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060018201620003d757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000825160005b81811015620004015760208186018101518583015201620003e5565b506000920191825250919050565b608051613ff062000432600039600081816108a701526131900152613ff06000f3fe60806040526004361061038c5760003560e01c8063821defc2116101dc578063bedb86fb11610102578063e2e2db8d116100a0578063f3127e291161006f578063f3127e2914610afe578063f97b64e514610b1e578063fb1bf05d14610b3e578063fee81cf414610b5e57600080fd5b8063e2e2db8d14610a98578063e98e5ddf14610ab8578063f04e283e14610ad8578063f2fde38b14610aeb57600080fd5b8063cdfa6a29116100dc578063cdfa6a2914610a0b578063d37aec9214610a2b578063d5157c6a14610a4b578063deb8a46114610a6b57600080fd5b8063bedb86fb14610995578063c4ed45ba146109b5578063cc30e90f146109eb57600080fd5b80639c5fc5471161017a578063a781a55511610149578063a781a55514610909578063ab23a23f14610936578063ae4bc70114610956578063ba774adb1461097557600080fd5b80639c5fc547146108755780639f72bede14610895578063a0f14d40146108c9578063a1420df8146108e957600080fd5b80638a3557ff116101b65780638a3557ff146107db5780638da5cb5b146107fb57806390d182d61461081457806392e184311461083457600080fd5b8063821defc21461074d5780638234dde51461076d5780638858d24e146107bb57600080fd5b806347720ebb116102c15780635f4b54dd1161025f5780636f7114431161022e5780636f711443146106d8578063715018a6146106f85780637b277980146107005780637cdd25231461072057600080fd5b80635f4b54dd146106585780636372c3d11461067857806364500abe146106985780636bc9033d146106b857600080fd5b80635117fa6d1161029b5780635117fa6d146105e957806354d1f13d14610616578063577c1af21461061e5780635c975abb1461063e57600080fd5b806347720ebb1461056e5780634c01bb8a146105a95780634ffce7c4146105c957600080fd5b806325fcf8521161032e578063336730a011610308578063336730a0146104e15780633699358f1461050e5780633b80a74a1461052e5780633edb64dd1461054e57600080fd5b806325fcf8521461047e5780632e0321ce146104ab57806332cb6b0c146104cb57600080fd5b80631367f7d91161036a5780631367f7d9146104085780631dd3c7a5146104285780631f76377314610456578063256929621461047657600080fd5b80630811dfe1146103915780630981dd2e146103b35780630e947c57146103e8575b600080fd5b34801561039d57600080fd5b506103b16103ac3660046132c5565b610b91565b005b3480156103bf57600080fd5b506103d36103ce3660046132f5565b610d57565b60405190151581526020015b60405180910390f35b3480156103f457600080fd5b506103b1610403366004613317565b610dbf565b34801561041457600080fd5b506103b161042336600461339b565b61105f565b34801561043457600080fd5b506104486104433660046133dc565b61110b565b6040519081526020016103df565b34801561046257600080fd5b506103b161047136600461339b565b611130565b6103b16111df565b34801561048a57600080fd5b5061049e6104993660046134c0565b61122e565b6040516103df919061355f565b3480156104b757600080fd5b506103b16104c63660046132f5565b61126d565b3480156104d757600080fd5b5061044861138881565b3480156104ed57600080fd5b506104486104fc3660046133dc565b600d6020526000908152604090205481565b34801561051a57600080fd5b506103b1610529366004613595565b611287565b34801561053a57600080fd5b506103b1610549366004613645565b611311565b34801561055a57600080fd5b506103b16105693660046132c5565b611705565b34801561057a57600080fd5b506103d36105893660046132f5565b600b60209081526000928352604080842090915290825290205460ff1681565b3480156105b557600080fd5b5061049e6105c43660046132f5565b6118be565b3480156105d557600080fd5b506103b16105e43660046133dc565b611998565b3480156105f557600080fd5b506106096106043660046133dc565b6119a5565b6040516103df91906136eb565b6103b1611ae8565b34801561062a57600080fd5b506103b161063936600461374d565b611b24565b34801561064a57600080fd5b506005546103d39060ff1681565b34801561066457600080fd5b506103d36106733660046132f5565b611f6a565b34801561068457600080fd5b506103b161069336600461380c565b611fae565b3480156106a457600080fd5b506103d36106b33660046133dc565b61208a565b3480156106c457600080fd5b506103b16106d33660046132f5565b6120cf565b3480156106e457600080fd5b506103b16106f33660046134c0565b6120e9565b6103b1612113565b34801561070c57600080fd5b506103b161071b36600461387d565b612127565b34801561072c57600080fd5b5061044861073b3660046133dc565b600c6020526000908152604090205481565b34801561075957600080fd5b506103b16107683660046132f5565b612141565b34801561077957600080fd5b506107a36107883660046133dc565b600e602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103df565b3480156107c757600080fd5b506103d36107d636600461387d565b612319565b3480156107e757600080fd5b506104486107f63660046132f5565b61234e565b34801561080757600080fd5b50638b78c6d819546107a3565b34801561082057600080fd5b5061049e61082f3660046132f5565b61239a565b34801561084057600080fd5b506107a361084f3660046132f5565b60106020908152600092835260408084209091529082529020546001600160a01b031681565b34801561088157600080fd5b506103b16108903660046138ab565b6123df565b3480156108a157600080fd5b506107a37f000000000000000000000000000000000000000000000000000000000000000081565b3480156108d557600080fd5b506103b16108e4366004613595565b6123f7565b3480156108f557600080fd5b506103b16109043660046138d7565b612477565b34801561091557600080fd5b506104486109243660046133dc565b60009081526008602052604090205490565b34801561094257600080fd5b506104486109513660046138ab565b612499565b34801561096257600080fd5b506005546103d390610100900460ff1681565b34801561098157600080fd5b506103b16109903660046132f5565b6124ce565b3480156109a157600080fd5b506103b16109b03660046138d7565b6128b6565b3480156109c157600080fd5b506107a36109d03660046133dc565b600f602052600090815260409020546001600160a01b031681565b3480156109f757600080fd5b506103d3610a063660046132f5565b6128d1565b348015610a1757600080fd5b506103b1610a263660046138f4565b612915565b348015610a3757600080fd5b50610448610a463660046139b7565b612a46565b348015610a5757600080fd5b506103b1610a6636600461380c565b612a76565b348015610a7757600080fd5b50610a8b610a863660046132f5565b612b53565b6040516103df91906139eb565b348015610aa457600080fd5b506103b1610ab33660046133dc565b612cc2565b348015610ac457600080fd5b506103b1610ad336600461380c565b612ccf565b6103b1610ae63660046139fe565b612da6565b6103b1610af93660046139fe565b612de6565b348015610b0a57600080fd5b50610448610b193660046133dc565b612e0d565b348015610b2a57600080fd5b506103b1610b39366004613a1b565b612e29565b348015610b4a57600080fd5b506103b1610b593660046132f5565b612f32565b348015610b6a57600080fd5b50610448610b793660046139fe565b63389a75e1600c908152600091909152602090205490565b610b99613103565b610ba161311e565b6000828152600f60205260409020546001600160a01b03168015610c4e57604051630166a3cf60e51b81526001600160a01b03821690632cd479e090610bf09060009087903390600401613ab4565b600060405180830381600087803b158015610c0a57600080fd5b505af1925050508015610c1b575060015b610c4e57806001600160a01b031683600080516020613f9b833981519152604051610c4590613ad3565b60405180910390a35b6000838152600f6020526040902080546001600160a01b0319166001600160a01b03841690811790915515610d0c57604051634725a5e160e01b81526001600160a01b03831690634725a5e190610cae9060009087903390600401613ab4565b600060405180830381600087803b158015610cc857600080fd5b505af1925050508015610cd9575060015b610d0c57816001600160a01b031683600080516020613f9b833981519152604051610d0390613af9565b60405180910390a35b7fcc9506a7438ef8ed3682623adea9bfd3a1ccb877ad207c2c000137a33bf1eb7b60008484604051610d4093929190613ab4565b60405180910390a150610d536001600055565b5050565b60008083118015610d6a57506113888311155b610d8f5760405162461bcd60e51b8152600401610d8690613b1d565b60405180910390fd5b600083815260016020908152604080832085845290915281208054610db390613b47565b90501190505b92915050565b610dc761311e565b638b78c6d819546001600160a01b0316336001600160a01b03161480610df25750610df28333613177565b610e0e5760405162461bcd60e51b8152600401610d8690613b81565b638b78c6d819546001600160a01b0316336001600160a01b03161480610e3b5750600554610100900460ff165b610e955760405162461bcd60e51b815260206004820152602560248201527f546f6b656e20646174612073746f72652063616c6c6261636b206e6f7420616c6044820152641b1bddd95960da1b6064820152608401610d86565b60008381526010602090815260408083208584529091529020546001600160a01b03168015610f4c57604051630166a3cf60e51b81526001600160a01b03821690632cd479e090610eee90879087903390600401613ab4565b600060405180830381600087803b158015610f0857600080fd5b505af1925050508015610f19575060015b610f4c57806001600160a01b031683600080516020613f9b833981519152604051610f4390613ad3565b60405180910390a35b6000848152601060209081526040808320868452909152902080546001600160a01b0319166001600160a01b0384169081179091551561101457604051634725a5e160e01b81526001600160a01b03831690634725a5e190610fb690879087903390600401613ab4565b600060405180830381600087803b158015610fd057600080fd5b505af1925050508015610fe1575060015b61101457816001600160a01b031683600080516020613f9b83398151915260405161100b90613af9565b60405180910390a35b7f5bef7e00487b055b076f40a3a34883f4ef5d1623c030dbf05364afde34442b6184848460405161104793929190613ab4565b60405180910390a15061105a6001600055565b505050565b611067613103565b60005b8181101561105a57600083838381811061108657611086613baa565b9050602002013590506000811180156110a157506113888111155b6110bd5760405162461bcd60e51b8152600401610d8690613b1d565b6000818152600a6020526040808220805460ff191690555182917fc688cda87785ecff65ede4a783129fd23595a0a66dc166ec8b17cdb889484a3e91a25061110481613bd6565b905061106a565b6000818152600760205260408120548061112757600454611129565b805b9392505050565b611138613103565b60005b8181101561105a57600083838381811061115757611157613baa565b90506020020135905060008111801561117257506113888111155b61118e5760405162461bcd60e51b8152600401610d8690613b1d565b6000818152600a6020526040808220805460ff191660011790555182917fb24ab603cff26dcfabbb7422ce508c40bfeab8b0ecd76996b1fa19460214942d91a2506111d881613bd6565b905061113b565b60006202a3006001600160401b03164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6060600061123c85856118be565b905080516000036112505782915050611129565b808060200190518101906112649190613bef565b95945050505050565b611275613103565b60009182526007602052604090912055565b61128f613103565b60005b8151811015610d535760006112bf8383815181106112b2576112b2613baa565b6020026020010151612a46565b600081815260026020526040808220805460ff191690555191925082917f639571b95c4af45eedb8278aaee5c0011a4fa9e2ccecb01ec74ec208329b35209190a25061130a81613bd6565b9050611292565b60055460ff16156113345760405162461bcd60e51b8152600401610d8690613c5c565b61133c61311e565b600061134b638b78c6d8195490565b6001600160a01b0316336001600160a01b0316149050808061137a575060008511801561137a57506113888511155b6113965760405162461bcd60e51b8152600401610d8690613b1d565b80806113b157506000858152600a602052604090205460ff16155b6113cd5760405162461bcd60e51b8152600401610d8690613c88565b60006113d885612e0d565b905081806113e4575080155b806113f0575080845111155b61142f5760405162461bcd60e51b815260206004820152601060248201526f4d65737361676520746f6f206c6f6e6760801b6044820152606401610d86565b818061144057506114408633613177565b61145c5760405162461bcd60e51b8152600401610d8690613b81565b8180611477575060008581526002602052604090205460ff16155b6114935760405162461bcd60e51b8152600401610d8690613cb5565b600061149e8661110b565b905082806114d0575060008781526009602090815260408083208984529091529020546114cc908290613cec565b4210155b6115165760405162461bcd60e51b815260206004820152601760248201527614dd589b5a5d0818dbdbdb191bdddb881b9bdd081b595d604a1b6044820152606401610d86565b6000868152600860209081526040808320815160c0810183528a81528084018c8152429382019384523360608301908152608083018b815260a084018d8152855460018082018855968a529790982084516006909802019687559151938601939093559251600285015590516003840180546001600160a01b0319166001600160a01b0390921691909117905590516004830155915160058201906115bb9082613d4d565b505050600087815260096020908152604080832089845290915290819020429055513390879089907fd9b877c0a169a424972a5deb3eb813602e83a581d608f93b92ed46b3f27cae0090611612908a908a90613e0c565b60405180910390a46000868152600e60205260409020546001600160a01b031680156116f15760405163a099fa6760e01b81526001600160a01b0382169063a099fa679061166c908b908b908b908b903390600401613e2e565b600060405180830381600087803b15801561168657600080fd5b505af1925050508015611697575060015b6116f157806001600160a01b031687600080516020613f9b8339815191526040516116e8906020808252601290820152711bdb93595cdcd859d954dd589b5a5d1d195960721b604082015260600190565b60405180910390a35b505050506116ff6001600055565b50505050565b61170d613103565b61171561311e565b6000828152600e60205260409020546001600160a01b031680156117c257604051630166a3cf60e51b81526001600160a01b03821690632cd479e0906117649060009087903390600401613ab4565b600060405180830381600087803b15801561177e57600080fd5b505af192505050801561178f575060015b6117c257806001600160a01b031683600080516020613f9b8339815191526040516117b990613ad3565b60405180910390a35b6000838152600e6020526040902080546001600160a01b0319166001600160a01b0384169081179091551561188057604051634725a5e160e01b81526001600160a01b03831690634725a5e1906118229060009087903390600401613ab4565b600060405180830381600087803b15801561183c57600080fd5b505af192505050801561184d575060015b61188057816001600160a01b031683600080516020613f9b83398151915260405161187790613af9565b60405180910390a35b604080518481526001600160a01b03841660208201527fc64ca0336268bc0cef96c3e7acaf3a799b25c8d073b3b435a73e93aef5536fe79101610d40565b60606000831180156118d257506113888311155b6118ee5760405162461bcd60e51b8152600401610d8690613b1d565b60008381526001602090815260408083208584529091529020805461191290613b47565b80601f016020809104026020016040519081016040528092919081815260200182805461193e90613b47565b801561198b5780601f106119605761010080835404028352916020019161198b565b820191906000526020600020905b81548152906001019060200180831161196e57829003601f168201915b5050505050905092915050565b6119a0613103565b600455565b606060086000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611add5760008481526020908190206040805160c081018252600686029092018054835260018101549383019390935260028301549082015260038201546001600160a01b031660608201526004820154608082015260058201805491929160a084019190611a4c90613b47565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7890613b47565b8015611ac55780601f10611a9a57610100808354040283529160200191611ac5565b820191906000526020600020905b815481529060010190602001808311611aa857829003601f168201915b505050505081525050815260200190600101906119da565b505050509050919050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b60055460ff1615611b475760405162461bcd60e51b8152600401610d8690613c5c565b611b4f61311e565b6000611b5e638b78c6d8195490565b6001600160a01b0316336001600160a01b03161490508080611b8d5750600084118015611b8d57506113888411155b611ba95760405162461bcd60e51b8152600401610d8690613b1d565b8080611bc457506000848152600a602052604090205460ff16155b611be05760405162461bcd60e51b8152600401610d8690613c88565b8080611bf15750611bf18433613177565b611c0d5760405162461bcd60e51b8152600401610d8690613b81565b8080611c28575060008381526002602052604090205460ff16155b611c445760405162461bcd60e51b8152600401610d8690613cb5565b6000611c4f84612e0d565b90508180611c5b575080155b80611c67575080835111155b611cb35760405162461bcd60e51b815260206004820152601760248201527f446174612073697a652065786365656473206c696d69740000000000000000006044820152606401610d86565b6000611cbe8561110b565b90508280611cf057506000868152600960209081526040808320888452909152902054611cec908290613cec565b4210155b611d365760405162461bcd60e51b815260206004820152601760248201527614dd589b5a5d0818dbdbdb191bdddb881b9bdd081b595d604a1b6044820152606401610d86565b60008681526009602090815260408083208884528252808320429055888352600182528083208884529091529020611d6e8582613d4d565b50336001600160a01b031685877ffbbc794d2a165452ae3067abfd23d4ce1578c735148c19eee1587795485d971687604051611daa919061355f565b60405180910390a46000858152600f60205260409020546001600160a01b03168015611e81576040516335438b6560e01b81526001600160a01b038216906335438b6590611e02908a908a908a903390600401613e6f565b600060405180830381600087803b158015611e1c57600080fd5b505af1925050508015611e2d575060015b611e8157806001600160a01b031686600080516020613f9b833981519152604051611e78906020808252600c908201526b1bdb91185d1854dd1bdc995960a21b604082015260600190565b60405180910390a35b60008781526010602090815260408083208984529091529020546001600160a01b03168015611f5b576040516335438b6560e01b81526001600160a01b038216906335438b6590611edc908b908b908b903390600401613e6f565b600060405180830381600087803b158015611ef657600080fd5b505af1925050508015611f07575060015b611f5b57806001600160a01b031687600080516020613f9b833981519152604051611f52906020808252600c908201526b1bdb91185d1854dd1bdc995960a21b604082015260600190565b60405180910390a35b505050505061105a6001600055565b6000828152600b6020908152604080832084845290915281205460ff1680156111295750506000908152600b60209081526040808320938352929052205460ff1690565b611fb6613103565b80518251146120235760405162461bcd60e51b815260206004820152603360248201527f4b65797320616e6420636f6f6c646f776e7320617272617973206d75737420686044820152720c2ecca40e8d0ca40e6c2daca40d8cadccee8d606b1b6064820152608401610d86565b60005b825181101561105a5781818151811061204157612041613baa565b60200260200101516007600085848151811061205f5761205f613baa565b60200260200101518152602001908152602001600020819055508061208390613bd6565b9050612026565b6000808211801561209d57506113888211155b6120b95760405162461bcd60e51b8152600401610d8690613b1d565b506000908152600a602052604090205460ff1690565b6120d7613103565b60009182526006602052604090912055565b61105a8383836040516020016120ff919061355f565b604051602081830303815290604052611b24565b61211b613103565b6121256000613224565b565b61105a8383836040516020016120ff911515815260200190565b60055460ff16156121645760405162461bcd60e51b8152600401610d8690613c5c565b61216c61311e565b8082036121b05760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103337b63637bb9039b2b63360711b6044820152606401610d86565b6121ba8233613177565b6121d65760405162461bcd60e51b8152600401610d8690613b81565b6000828152600b6020908152604080832084845290915290205460ff16156122345760405162461bcd60e51b8152602060048201526011602482015270416c726561647920666f6c6c6f77696e6760781b6044820152606401610d86565b6000828152600b602090815260408083208484528252808320805460ff19166001179055848352600c909152812080549161226e83613bd6565b90915550506000818152600d6020526040812080549161228d83613bd6565b9091555050604051819083907f16bdce19402ca7cda2d248f7d08b6942b5939bc270a9ec3fb323b113fea05b5090600090a36000818152600b6020908152604080832085845290915290205460ff161561230f57604051819083907f79440481221353686b2f7899bffb65c7fde1560f080aac64fb8f24268a615f9190600090a35b610d536001600055565b60008061232685856118be565b9050805160000361233a5782915050611129565b808060200190518101906112649190613ea7565b60008061235b84846118be565b9050600081511161237e5760405162461bcd60e51b8152600401610d8690613ec4565b808060200190518101906123929190613eeb565b949350505050565b606060006123a884846118be565b905060008151116123cb5760405162461bcd60e51b8152600401610d8690613ec4565b808060200190518101906123929190613bef565b61105a8383836040516020016120ff91815260200190565b6123ff613103565b60005b8151811015610d535760006124228383815181106112b2576112b2613baa565b600081815260026020526040808220805460ff191660011790555191925082917f0e1949172711d1709d2db1398a7675665a90abafb2c0c4e36d32f6117e98702f9190a25061247081613bd6565b9050612402565b61247f613103565b600580549115156101000261ff0019909216919091179055565b6000806124a685856118be565b905080516000036124ba5782915050611129565b808060200190518101906112649190613eeb565b60055460ff16156124f15760405162461bcd60e51b8152600401610d8690613c5c565b6124f961311e565b6000612508638b78c6d8195490565b6001600160a01b0316336001600160a01b03161490508080612537575060008311801561253757506113888311155b6125535760405162461bcd60e51b8152600401610d8690613b1d565b808061256e57506000838152600a602052604090205460ff16155b61258a5760405162461bcd60e51b8152600401610d8690613c88565b808061259b575061259b8333613177565b6125b75760405162461bcd60e51b8152600401610d8690613b81565b80806125d2575060008281526002602052604090205460ff16155b6125ee5760405162461bcd60e51b8152600401610d8690613cb5565b60008381526001602090815260408083208584529091528120805461261290613b47565b80601f016020809104026020016040519081016040528092919081815260200182805461263e90613b47565b801561268b5780601f106126605761010080835404028352916020019161268b565b820191906000526020600020905b81548152906001019060200180831161266e57829003601f168201915b505050600087815260016020908152604080832089845290915281209394506126b79392509050613262565b6040513390849086907f2c1e85e34a602cadaf5c32580d8cc50a68b518be61ec44bc6773e0f5ece758bb90600090a46000838152600f60205260409081902054905163b179a62760e01b81526001600160a01b039091169063b179a62790612729908790879086903390600401613e6f565b600060405180830381600087803b15801561274357600080fd5b505af1925050508015612754575060015b6127bd576000838152600f6020526040908190205490516001600160a01b03909116908490600080516020613f9b833981519152906127b4906020808252600d908201526c1bdb91185d1854995b5bdd9959609a1b604082015260600190565b60405180910390a35b60008481526010602090815260408083208684529091529081902054905163b179a62760e01b81526001600160a01b039091169063b179a6279061280b908790879086903390600401613e6f565b600060405180830381600087803b15801561282557600080fd5b505af1925050508015612836575060015b6128aa576000848152601060209081526040808320868452909152908190205490516001600160a01b03909116908490600080516020613f9b833981519152906128a1906020808252600d908201526c1bdb91185d1854995b5bdd9959609a1b604082015260600190565b60405180910390a35b5050610d536001600055565b6128be613103565b6005805460ff1916911515919091179055565b6000806128de84846118be565b905060008151116129015760405162461bcd60e51b8152600401610d8690613ec4565b808060200190518101906123929190613ea7565b868514801561292357508483145b801561292e57508281145b6129725760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606401610d86565b60005b87811015612a3b57612a2b89898381811061299257612992613baa565b905060200201358888848181106129ab576129ab613baa565b905060200201358787858181106129c4576129c4613baa565b90506020028101906129d69190613f04565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250899250889150879050818110612a1f57612a1f613baa565b90506020020135611311565b612a3481613bd6565b9050612975565b505050505050505050565b600081604051602001612a599190613f4a565b604051602081830303815290604052805190602001209050919050565b612a7e613103565b8051825114612aec5760405162461bcd60e51b815260206004820152603460248201527f4b65797320616e64206d61784c656e6774687320617272617973206d757374206044820152730d0c2ecca40e8d0ca40e6c2daca40d8cadccee8d60631b6064820152608401610d86565b60005b825181101561105a57818181518110612b0a57612b0a613baa565b602002602001015160066000858481518110612b2857612b28613baa565b602002602001015181526020019081526020016000208190555080612b4c90613bd6565b9050612aef565b612b986040518060c0016040528060008019168152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b6000838152600860205260409020805483908110612bb857612bb8613baa565b90600052602060002090600602016040518060c00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200160048201548152602001600582018054612c3890613b47565b80601f0160208091040260200160405190810160405280929190818152602001828054612c6490613b47565b8015612cb15780601f10612c8657610100808354040283529160200191612cb1565b820191906000526020600020905b815481529060010190602001808311612c9457829003601f168201915b505050505081525050905092915050565b612cca613103565b600355565b60055460ff1615612cf25760405162461bcd60e51b8152600401610d8690613c5c565b8051825114612d4e5760405162461bcd60e51b815260206004820152602260248201527f546f6b656e2049447320616e64206b657973206c656e677468206d69736d61746044820152610c6d60f31b6064820152608401610d86565b60005b825181101561105a57612d96838281518110612d6f57612d6f613baa565b6020026020010151838381518110612d8957612d89613baa565b60200260200101516124ce565b612d9f81613bd6565b9050612d51565b612dae613103565b63389a75e1600c52806000526020600c208054421115612dd657636f5e88186000526004601cfd5b60009055612de381613224565b50565b612dee613103565b8060601b612e0457637448fbae6000526004601cfd5b612de381613224565b6000818152600660205260408120548061112757600354611129565b8483148015612e3757508281145b612e7b5760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606401610d86565b60005b85811015612f2957612f19878783818110612e9b57612e9b613baa565b90506020020135868684818110612eb457612eb4613baa565b90506020020135858585818110612ecd57612ecd613baa565b9050602002810190612edf9190613f04565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b2492505050565b612f2281613bd6565b9050612e7e565b50505050505050565b60055460ff1615612f555760405162461bcd60e51b8152600401610d8690613c5c565b612f5d61311e565b808203612fa35760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba103ab73337b63637bb9039b2b63360611b6044820152606401610d86565b612fad8233613177565b612fc95760405162461bcd60e51b8152600401610d8690613b81565b6000828152600b6020908152604080832084845290915290205460ff166130225760405162461bcd60e51b815260206004820152600d60248201526c4e6f7420666f6c6c6f77696e6760981b6044820152606401610d86565b6000828152600b602090815260408083208484528252808320805460ff19169055848352600c909152812080549161305983613f66565b90915550506000818152600d6020526040812080549161307883613f66565b9091555050604051819083907f22d41f5ffb7660f21fcd3ac33e0bb7ac33fc5e8dae600b55e4c1ce58222cd29190600090a36000818152600b6020908152604080832085845290915290205460ff161561230f57604051819083907fcb640ae0e1d4ad3e7fca425521878586af87a312b6ad414ed523cc03e5f66cec90600090a3610d536001600055565b638b78c6d819543314612125576382b429006000526004601cfd5b6002600054036131705760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d86565b6002600055565b6040516331a9108f60e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa9250505080156131fb575060408051601f3d908101601f191682019092526131f891810190613f7d565b60015b61320757506000610db9565b826001600160a01b0316816001600160a01b031614915050610db9565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b50805461326e90613b47565b6000825580601f1061327e575050565b601f016020900490600052602060002090810190612de391905b808211156132ac5760008155600101613298565b5090565b6001600160a01b0381168114612de357600080fd5b600080604083850312156132d857600080fd5b8235915060208301356132ea816132b0565b809150509250929050565b6000806040838503121561330857600080fd5b50508035926020909101359150565b60008060006060848603121561332c57600080fd5b83359250602084013591506040840135613345816132b0565b809150509250925092565b60008083601f84011261336257600080fd5b5081356001600160401b0381111561337957600080fd5b6020830191508360208260051b850101111561339457600080fd5b9250929050565b600080602083850312156133ae57600080fd5b82356001600160401b038111156133c457600080fd5b6133d085828601613350565b90969095509350505050565b6000602082840312156133ee57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613433576134336133f5565b604052919050565b60006001600160401b03821115613454576134546133f5565b50601f01601f191660200190565b60006134756134708461343b565b61340b565b905082815283838301111561348957600080fd5b828260208301376000602084830101529392505050565b600082601f8301126134b157600080fd5b61112983833560208501613462565b6000806000606084860312156134d557600080fd5b833592506020840135915060408401356001600160401b038111156134f957600080fd5b613505868287016134a0565b9150509250925092565b60005b8381101561352a578181015183820152602001613512565b50506000910152565b6000815180845261354b81602086016020860161350f565b601f01601f19169290920160200192915050565b6020815260006111296020830184613533565b60006001600160401b0382111561358b5761358b6133f5565b5060051b60200190565b600060208083850312156135a857600080fd5b82356001600160401b03808211156135bf57600080fd5b818501915085601f8301126135d357600080fd5b81356135e161347082613572565b81815260059190911b8301840190848101908883111561360057600080fd5b8585015b838110156136385780358581111561361c5760008081fd5b61362a8b89838a01016134a0565b845250918601918601613604565b5098975050505050505050565b6000806000806080858703121561365b57600080fd5b843593506020850135925060408501356001600160401b0381111561367f57600080fd5b61368b878288016134a0565b949793965093946060013593505050565b80518252602081015160208301526040810151604083015260018060a01b03606082015116606083015260808101516080830152600060a082015160c060a085015261239260c0850182613533565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561374057603f1988860301845261372e85835161369c565b94509285019290850190600101613712565b5092979650505050505050565b60008060006060848603121561376257600080fd5b833592506020840135915060408401356001600160401b0381111561378657600080fd5b8401601f8101861361379757600080fd5b61350586823560208401613462565b600082601f8301126137b757600080fd5b813560206137c761347083613572565b82815260059290921b840181019181810190868411156137e657600080fd5b8286015b8481101561380157803583529183019183016137ea565b509695505050505050565b6000806040838503121561381f57600080fd5b82356001600160401b038082111561383657600080fd5b613842868387016137a6565b9350602085013591508082111561385857600080fd5b50613865858286016137a6565b9150509250929050565b8015158114612de357600080fd5b60008060006060848603121561389257600080fd5b833592506020840135915060408401356133458161386f565b6000806000606084860312156138c057600080fd5b505081359360208301359350604090920135919050565b6000602082840312156138e957600080fd5b81356111298161386f565b6000806000806000806000806080898b03121561391057600080fd5b88356001600160401b038082111561392757600080fd5b6139338c838d01613350565b909a50985060208b013591508082111561394c57600080fd5b6139588c838d01613350565b909850965060408b013591508082111561397157600080fd5b61397d8c838d01613350565b909650945060608b013591508082111561399657600080fd5b506139a38b828c01613350565b999c989b5096995094979396929594505050565b6000602082840312156139c957600080fd5b81356001600160401b038111156139df57600080fd5b612392848285016134a0565b602081526000611129602083018461369c565b600060208284031215613a1057600080fd5b8135611129816132b0565b60008060008060008060608789031215613a3457600080fd5b86356001600160401b0380821115613a4b57600080fd5b613a578a838b01613350565b90985096506020890135915080821115613a7057600080fd5b613a7c8a838b01613350565b90965094506040890135915080821115613a9557600080fd5b50613aa289828a01613350565b979a9699509497509295939492505050565b92835260208301919091526001600160a01b0316604082015260600190565b6020808252600c908201526b1bdb911a5cd8dbdb9b9958dd60a21b604082015260600190565b6020808252600a908201526937b72932b3b4b9ba32b960b11b604082015260600190565b60208082526010908201526f125b9d985b1a59081d1bdad95b88125160821b604082015260600190565b600181811c90821680613b5b57607f821691505b602082108103613b7b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600f908201526e2737ba103a37b5b2b71037bbb732b960891b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613be857613be8613bc0565b5060010190565b600060208284031215613c0157600080fd5b81516001600160401b03811115613c1757600080fd5b8201601f81018413613c2857600080fd5b8051613c366134708261343b565b818152856020838501011115613c4b57600080fd5b61126482602083016020860161350f565b60208082526012908201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b604082015260600190565b602080825260139082015272151bdad95b881251081a5cc8189b1bd8dad959606a1b604082015260600190565b60208082526017908201527f4b65792069732061646d696e2077726974652d6f6e6c79000000000000000000604082015260600190565b80820180821115610db957610db9613bc0565b601f82111561105a57600081815260208120601f850160051c81016020861015613d265750805b601f850160051c820191505b81811015613d4557828155600101613d32565b505050505050565b81516001600160401b03811115613d6657613d666133f5565b613d7a81613d748454613b47565b84613cff565b602080601f831160018114613daf5760008415613d975750858301515b600019600386901b1c1916600185901b178555613d45565b600085815260208120601f198616915b82811015613dde57888601518255948401946001909101908401613dbf565b5085821015613dfc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000613e1f6040830185613533565b90508260208301529392505050565b85815284602082015260a060408201526000613e4d60a0830186613533565b6060830194909452506001600160a01b03919091166080909101529392505050565b848152836020820152608060408201526000613e8e6080830185613533565b905060018060a01b038316606083015295945050505050565b600060208284031215613eb957600080fd5b81516111298161386f565b6020808252600d908201526c139bc819185d1848199bdd5b99609a1b604082015260600190565b600060208284031215613efd57600080fd5b5051919050565b6000808335601e19843603018112613f1b57600080fd5b8301803591506001600160401b03821115613f3557600080fd5b60200191503681900382131561339457600080fd5b60008251613f5c81846020870161350f565b9190910192915050565b600081613f7557613f75613bc0565b506000190190565b600060208284031215613f8f57600080fd5b8151611129816132b056feeaa1af4d532d662019def080a68669f9508da0aec4b8684ed300b36187d758eaa2646970667358221220b556fd790cb2117c029c70cf3a7ff54ef2d33fa00b0209a266f94a86acd66f0664736f6c63430008140033000000000000000000000000ce2830932889c7fb5e5206287c43554e673dcc88