0 txs
0 calls
constructor
constructor(uint256 _likeValue, address _protocolRewards, address _freeeRecipient)
functions
BACKFILLER_ROLE
viewfunction BACKFILLER_ROLE() view returns (bytes32)
commentLikesQuantity
viewfunction commentLikesQuantity(tuple commentIdentifier) view returns (uint256)
contractName
purefunction contractName() pure returns (string)
contractVersion
purefunction contractVersion() pure returns (string)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DELEGATE_COMMENTER
viewfunction DELEGATE_COMMENTER() view returns (bytes32)
DOMAIN_NAME
viewfunction DOMAIN_NAME() view returns (string)
DOMAIN_VERSION
viewfunction DOMAIN_VERSION() view returns (string)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
FREEE_REWARD_NO_REFERRER_PCT
viewfunction FREEE_REWARD_NO_REFERRER_PCT() view returns (uint256)
FREEE_REWARD_PCT
viewfunction FREEE_REWARD_PCT() view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hashAndCheckCommentExists
viewfunction hashAndCheckCommentExists(tuple commentIdentifier) view returns (bytes32 commentId, bool exists)
hashAndValidateCommentExists
viewfunction hashAndValidateCommentExists(tuple commentIdentifier) view returns (bytes32 commentId)
hashCommentIdentifier
purefunction hashCommentIdentifier(tuple commentIdentifier) pure returns (bytes32)
hashPermitComment
viewfunction hashPermitComment(tuple permit) view returns (bytes32)
hashPermitLikeComment
viewfunction hashPermitLikeComment(tuple permit) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
implementation
viewfunction implementation() view returns (address)
likeValue
viewfunction likeValue() view returns (uint256)
nextNonce
viewfunction nextNonce() view returns (bytes32)
nonceUsed
viewfunction nonceUsed(address owner, bytes32 nonce) view returns (bool)
PERMISSION_BIT_ADMIN
viewfunction PERMISSION_BIT_ADMIN() view returns (uint256)
protocolRewards
viewfunction protocolRewards() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
REFERRER_REWARD_PCT
viewfunction REFERRER_REWARD_PCT() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
backfillBatchAddComment
nonpayablefunction backfillBatchAddComment(tuple[] commentIdentifiers, string[] texts, uint256[] timestamps, bytes32[] originalTransactionHashes)
comment
payablefunction comment(address commenter, address contractAddress, uint256 tokenId, string text, tuple replyTo, address commenterSmartWallet, address referrer) payable returns (tuple commentIdentifier)
delegateComment
payablefunction delegateComment(address commenter, address contractAddress, uint256 tokenId, string text, tuple replyTo, address commenterSmartWalletOwner, address referrer) payable returns (tuple commentIdentifier, bytes32 commentId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address defaultAdmin, address backfiller, address[] delegateCommenters)
likeComment
payablefunction likeComment(tuple commentIdentifier, uint256 likesQuantity, address referrer) payable
permitComment
payablefunction permitComment(tuple permit, bytes signature) payable
permitLikeComment
payablefunction permitLikeComment(tuple permit, bytes signature) payable
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
CommentBackfilled
event CommentBackfilled(bytes32 indexed commentId, (address commenter, address contractAddress, uint256 tokenId, bytes32 nonce) commentIdentifier, string text, uint256 timestamp, bytes32 originalTransactionId)
CommentCreated
event CommentCreated(bytes32 indexed commentId, (address commenter, address contractAddress, uint256 tokenId, bytes32 nonce) commentIdentifier, bytes32 replyToId, (address commenter, address contractAddress, uint256 tokenId, bytes32 nonce) replyTo, uint256 likesValue, string text, uint256 timestamp, address referrer)
CommentLiked
event CommentLiked(bytes32 indexed commentId, (address commenter, address contractAddress, uint256 tokenId, bytes32 nonce) commentIdentifier, uint256 likesValue, address liker, uint256 timestamp, address referrer)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressZero
error AddressZero()
ArrayLengthMismatch
error ArrayLengthMismatch()
CannotLikeOwnComment
error CannotLikeOwnComment()
CommentAddressOrTokenIdsDoNotMatch
error CommentAddressOrTokenIdsDoNotMatch(address commentAddress, uint256 commentTokenId, address replyAddress, uint256 replyTokenId)
CommentDoesntExist
error CommentDoesntExist()
CommenterMismatch
error CommenterMismatch(address expected, address actual)
DuplicateComment
error DuplicateComment(bytes32 commentId)
EmptyComment
error EmptyComment()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ERC2612ExpiredSignature
error ERC2612ExpiredSignature(uint256 deadline)
FailedCall
error FailedCall()
IncorrectDestinationChain
error IncorrectDestinationChain(uint256 wrongDestinationChainId)
IncorrectETHAmountForLikes
error IncorrectETHAmountForLikes(uint256 actual, uint256 expected)
InvalidAccountNonce
error InvalidAccountNonce(address account, bytes32 currentNonce)
InvalidInitialization
error InvalidInitialization()
InvalidSignature
error InvalidSignature()
MustSendAtLeastOneLike
error MustSendAtLeastOneLike()
NoFundsRecipient
error NoFundsRecipient()
NotInitializing
error NotInitializing()
NotSmartWallet
error NotSmartWallet()
NotSmartWalletOwner
error NotSmartWalletOwner()
NotTokenHolderOrAdmin
error NotTokenHolderOrAdmin()
OnlyLikesContract
error OnlyLikesContract()
TransferFailed
error TransferFailed()
UpgradeToMismatchedContractName
error UpgradeToMismatchedContractName(string currentName, string newName)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x6101003461019657601f613f2838819003918201601f19168301926001600160401b039290918385118386101761019a57816060928492604097885283398101031261019657805161005e84610057602085016101ae565b93016101ae565b30608052926001600160a01b0392831692831590811561018b575b5061017a577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff82881c16610169578080831603610125575b50505060a05260c05260e05251613d6590816101c382396080518181816114e3015261158c015260a05181818161195b015281816122900152818161237f015281816128e7015261299e015260c0518181816119dc0152612f0c015260e051818181612e4e015261304c0152f35b6001600160401b0319909116811790915584519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80806100b7565b865163f92ee8a960e01b8152600490fd5b8451639fabe1c160e01b8152600490fd5b90508416155f610079565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101965756fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714611af4575080630e230f9714611a8c57806323158dd814611a44578063248a9ca314611a0b57806329df6479146119c75780632f2ff15d1461197e57806332b232501461194457806336568abe146118fd5780633a7dfb3a146118c35780634f1ef2861461153a57806352d1902d146114d157806353c6dcd5146112eb5780635c60da1b146112b75780635cfc66171461129b578063622110d31461126157806375ae094f1461122257806375d0c0dc146111d457806377a24f3614610ca2578063796f077b14610c8757806384b0196e14610b4657806391d1485414610af157806394053b34146109c057806397de1487146107065780639c5d1e91146106eb578063a0a8e460146106a6578063a217fddf1461068c578063ac048ad41461064a578063acb8cc491461061b578063ad3cb1cc146105d2578063b9b7b83a146104e9578063c0464356146104ce578063c46a4ae11461049c578063ce5263c3146102da578063d547741f1461028f578063d69c3d3014610253578063e30e9ae31461022f578063e8bebe8514610214578063eb231345146101f95763ffb5d589146101c9575f80fd5b346101f55760803660031901126101f55760206101ed6101e836611dd2565b612242565b604051908152f35b5f80fd5b346101f5575f3660031901126101f557602060405160148152f35b346101f5575f3660031901126101f5576020604051600a8152f35b346101f55760803660031901126101f55760206101ed61024e36611dd2565b61220e565b346101f5575f3660031901126101f55760207f9e5d0d3a4c7e8d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d0254604051908152f35b346101f55760403660031901126101f5576102d86004356102ae611b5d565b90805f525f80516020613d108339815191526020526102d3600160405f200154612413565b6126ae565b005b6102e336611d22565b9295969093946102f16121b1565b50335f9081527ff42a8efff468fcef324535266976260ddee6dd8f36b86533dba0904c131e743060205260409020547fc590cf330eebec919872b979b32e0cfb49fcb1f4a0cef88b6b29d9a1713fb87d9060ff161561047e57509061035f91610359346128df565b98612874565b9461038261037a60018060a01b039687895116933691611c14565b923690611e25565b9085875116908082036104605750505f61039b8761220e565b95808351166103ec575b508251156103da5760a0976103bd6103c696896131e0565b42938888612937565b6103d36040518093611da5565b6080820152f35b604051632b3f471360e01b8152600490fd5b90506103f782612242565b90806020890151169060208401511680821480159061044e575b61041b57506103a5565b90836084926040808c0151920151916040519363fbd0682760e01b85526004850152602484015260448301526064820152fd5b50604089015160408501511415610411565b6044925060405191631851a83b60e11b835260048301526024820152fd5b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b346101f55760803660031901126101f55760406104c06104bb36611dd2565b6121e5565b825191825215156020820152f35b346101f5575f3660031901126101f557602060405160028152f35b366003190161018081126101f557610160136101f557610164356001600160401b0381116101f55761051f903690600401611c4a565b610527611e8c565b9163ffffffff92838046169116036105b15761055d9250610546611f0d565b9161054f611eb1565b9160c4359360e4359061278f565b60a43580156105a057610570348261228e565b610578611eb1565b9061010435906001600160a01b03821682036101f5576102d89261059b36611dd2565b6122ec565b6040516218951560e81b8152600490fd5b6024836105bc611e8c565b604051630b6adcb760e11b815291166004820152fd5b346101f5575f3660031901126101f5576106176040516105f181611ba2565b60058152640352e302e360dc1b6020820152604051918291602083526020830190611c77565b0390f35b346101f5575f3660031901126101f557610617610636611e6f565b604051918291602083526020830190611c77565b346101f55760803660031901126101f55761066761024e36611dd2565b5f525f80516020613cf08339815191526020526020600160405f200154604051908152f35b346101f5575f3660031901126101f55760206040515f8152f35b346101f5575f3660031901126101f5576106176040516106c581611ba2565b60058152640302e312e360dc1b6020820152604051918291602083526020830190611c77565b346101f5575f3660031901126101f5576020604051601e8152f35b346101f55760803660031901126101f5576001600160401b036004358181116101f557366023820112156101f557818160040135116101f557366024826004013560071b830101116101f5576024358281116101f55761076a903690600401611c9b565b91906044358481116101f557610784903690600401611c9b565b9390946064359081116101f55761079f903690600401611c9b565b335f9081527f3dcf8136aea27c4e59adba4b5b5f26ca29dc6e5a703de453b2361643c43217c7602052604090205490969192907f2294cdd65f68a33a3e7097ee86a70cf0f4adf6b27328c6b154d47834bdfcdf4e9060ff161561047e5750808560040135148015906109b6575b80156109ac575b61099a575f5b8560040135811061082657005b61084461024e3661083f848a6004013560248c016121d5565b611e25565b90815f525f80516020613cf083398151915260205260ff60405f20541661098157815f525f80516020613cf083398151915260205260405f20600160ff1982541617905561089a81886004013560248a016121d5565b918382101561096d577fec2df5bf41a479e70f1f7592a04088810a9cff9d9c1783f83c19c5f8384898a08a866001958c6108f3876108eb818f6108e3908260051b810190611edb565b95909761218a565b35958d61218a565b356040519485938a8060a01b038061090a83611b73565b16865261091960208301611b73565b166020860152604081013560408601526060809101359085015260e060808501528260e08501528261010095868601375f84840186015260a084015260c0830152601f01601f19168101030190a201610819565b634e487b7160e01b5f52603260045260245ffd5b6040516345ee5b0b60e11b815260048101839052602490fd5b60405163512509d360e11b8152600490fd5b5086861415610813565b508581141561080c565b6109fc6109f4610a046109d236611d22565b969097946109e49a949399929a6121b1565b506109ee346128df565b96612874565b963691611c14565b953690611e25565b84516001600160a01b0392908316338103610ad357505f90610a258761220e565b9380845116610a5f575b508751156103da57608097610a48610a5097838a6130e5565b874295612937565b610a5d6040518092611da5565bf35b9150610a6a83612242565b918060208901511690602085015116808214801590610ac1575b610a8e5750610a2f565b90846084926040808c0151920151916040519363fbd0682760e01b85526004850152602484015260448301526064820152fd5b50604089015160408601511415610a84565b60449060405190631851a83b60e11b82526004820152336024820152fd5b346101f55760403660031901126101f557610b0a611b5d565b6004355f525f80516020613d1083398151915260205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b346101f5575f3660031901126101f5577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610c5e575b15610c2157610b8c612bed565b610b94612cc2565b906040519160208301928084106001600160401b03851117610c0d57610bed61061792610bdf956040525f8352604051958695600f60f81b875260e0602088015260e0870190611c77565b908582036040870152611c77565b904660608501523060808501525f60a085015283820360c0850152611cef565b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610b7f565b346101f5575f3660031901126101f557610617610636611ccb565b346101f55760603660031901126101f557610cbb611b47565b610cc3611b5d565b906044356001600160401b0381116101f557610ce3903690600401611c9b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00938454936001600160401b038516801590816111c4575b60011490816111ba575b1590816111b1575b5061119f5760016001600160401b0319861617865560ff8560401c1615611180575b6001600160a01b0381811615908115611175575b5061116357610d706132bc565b610d786132bc565b610d80611ccb565b610d88611e6f565b90610d916132bc565b610d996132bc565b8051906001600160401b038211610c0d578190610dc35f80516020613cb083398151915254612bb5565b601f81116110e9575b50602090601f831160011461104d575f92611042575b50508160011b915f199060031b1c1916175f80516020613cb0833981519152555b80516001600160401b038111610c0d577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10391610e3f8354612bb5565b601f8111610fe0575b50602090601f8311600114610f56579180610eca9492610ed09796945f92610f4b575b50508160011b915f199060031b1c19161790555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155612461565b506124eb565b505f5b818110610f26578460ff8560401c1615610ee957005b68ff00000000000000001981541690557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b80610f44610f3f610f3a600194868861218a565b611ec7565b612598565b5001610ed3565b015190508b80610e6b565b90601f19831691845f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75925f5b818110610fc85750926001928592610ed0999896610eca989610610fb0575b505050811b019055610e7f565b01515f1960f88460031b161c191690558b8080610fa3565b92936020600181928786015181550195019301610f84565b835f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f840160051c81019160208510611038575b601f0160051c01905b81811061102d5750610e48565b5f8155600101611020565b9091508190611017565b015190508980610de2565b5f80516020613cb08339815191525f9081527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d9350601f198516905b8181106110d157509084600195949392106110b9575b505050811b015f80516020613cb083398151915255610e03565b01515f1960f88460031b161c1916905589808061109f565b92936020600181928786015181550195019301611089565b9091505f80516020613cb08339815191525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f840160051c81019160208510611159575b90601f859493920160051c01905b81811061114b5750610dcc565b5f815584935060010161113e565b9091508190611130565b604051639fabe1c160e01b8152600490fd5b905082161587610d63565b68ffffffffffffffffff19851668010000000000000001178655610d4f565b60405163f92ee8a960e01b8152600490fd5b90501587610d2d565b303b159150610d25565b604087901c60ff16159150610d1b565b346101f5575f3660031901126101f5576106176040516111f381611ba2565b600e81526d467265656520436f6d6d656e747360901b6020820152604051918291602083526020830190611c77565b346101f5576003196020368201126101f557600435906001600160401b0382116101f5576101c09082360301126101f5576101ed602091600401612035565b346101f5575f3660031901126101f55760206040517fc590cf330eebec919872b979b32e0cfb49fcb1f4a0cef88b6b29d9a1713fb87d8152f35b346101f5576101603660031901126101f55760206101ed611f0d565b346101f5575f3660031901126101f5575f80516020613cd0833981519152546040516001600160a01b039091168152602090f35b6003196040368201126101f557600435906001600160401b038083116101f5576101c0836004019284360301126101f5576024359081116101f557611334903690600401611c4a565b6101a48401939161134485611ea0565b63ffffffff90818046169116036114c55750906113829161136485612035565b9161136e86611ec7565b91610144860135936101648701359061278f565b6113a661139160448301611ec7565b61139a84611ec7565b90606484013590612874565b906113b0346128df565b9160848201916101048101936113c68587611edb565b9390956113e36113d860248601611ec7565b976109f43689611e25565b935f946113ef8461220e565b87519097906001600160a01b03908116611451575b505051156103da5761143661142d61143e936102d89b6114286101249c89896130e5565b611edb565b99909201611ec7565b973691611c14565b9061144b42963690611e25565b94612937565b90965061145d87612242565b9681602087015116916020820151168083148015906114b3575b6114815750611404565b60849350604080880151920151916040519363fbd0682760e01b85526004850152602484015260448301526064820152fd5b50604087015160408301511415611477565b6024906105bc87611ea0565b346101f5575f3660031901126101f5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036115285760206040515f80516020613cd08339815191528152f35b60405163703e46dd60e11b8152600490fd5b6003196040368201126101f55761154f611b47565b9060249182356001600160401b0381116101f557366023820112156101f5576115819036908581600401359101611c14565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081163081149081156118a8575b5061152857335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602090815260409091205490919060ff161561188b57604051631d74303760e21b80825291841695905f81600481838b5af1908115611825575f91611871575b50604051908382525f82600481305afa918215611825575f92611855575b5084815191012090848151910120036117825750506040516352d1902d60e01b81528181600481885afa5f9181611753575b5061169057604051634c9c8ce360e01b8152600481018690528690fd5b8490865f80516020613cd08339815191529182810361173e5750843b15611728575080546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a283511561170e57505f8381926102d895519101845af4611708613337565b9161374e565b925050503461171957005b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101849052fd5b60405190632a87526960e21b82526004820152fd5b9091508281813d831161177b575b61176b8183611bd8565b810103126101f557519087611673565b503d611761565b9250925050604051918083525f83600481305afa928315611825575f93611830575b505f929360048492604051958693849283525af18015611825576117ef946117fd935f92611801575b5060405195869563a23cbf7b60e01b8752604060048801526044870190611c77565b928584030190850152611c77565b0390fd5b61181e9192503d805f833e6118168183611bd8565b81019061272d565b90866117cd565b6040513d5f823e3d90fd5b5f935093600461184b8593963d8086833e6118168183611bd8565b94505093906117a4565b61186a9192503d805f833e6118168183611bd8565b9089611641565b61188591503d805f833e6118168183611bd8565b88611623565b60405163e2517d3f60e01b81523360048201525f81880152604490fd5b9050815f80516020613cd083398151915254161415866115b8565b346101f5575f3660031901126101f55760206040517f2294cdd65f68a33a3e7097ee86a70cf0f4adf6b27328c6b154d47834bdfcdf4e8152f35b346101f55760403660031901126101f557611916611b5d565b336001600160a01b03821603611932576102d8906004356126ae565b60405163334bd91960e11b8152600490fd5b346101f5575f3660031901126101f55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101f55760403660031901126101f5576102d860043561199d611b5d565b90805f525f80516020613d108339815191526020526119c2600160405f200154612413565b61263e565b346101f5575f3660031901126101f5576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101f55760203660031901126101f5576004355f525f80516020613d108339815191526020526020600160405f200154604051908152f35b366003190160c081126101f5576080136101f55760843560a4356001600160a01b03811681036101f55781156105a0576102d891611a82348261228e565b3361059b36611dd2565b346101f55760403660031901126101f5576001600160a01b03611aad611b47565b165f527fc84b62be2e432010aa71cc1bbdba4c7b02245544521aa5beae20093c7062240060205260405f206024355f52602052602060ff60405f2054166040519015158152f35b346101f55760203660031901126101f5576004359063ffffffff60e01b82168092036101f557602091637965db0b60e01b8114908115611b36575b5015158152f35b6301ffc9a760e01b14905083611b2f565b600435906001600160a01b03821682036101f557565b602435906001600160a01b03821682036101f557565b35906001600160a01b03821682036101f557565b608081019081106001600160401b03821117610c0d57604052565b604081019081106001600160401b03821117610c0d57604052565b60c081019081106001600160401b03821117610c0d57604052565b90601f801991011681019081106001600160401b03821117610c0d57604052565b6001600160401b038111610c0d57601f01601f191660200190565b929192611c2082611bf9565b91611c2e6040519384611bd8565b8294818452818301116101f5578281602093845f960137010152565b9181601f840112156101f5578235916001600160401b0383116101f557602083818601950101116101f557565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9181601f840112156101f5578235916001600160401b0383116101f5576020808501948460051b0101116101f557565b60405190611cd882611ba2565b6008825267436f6d6d656e747360c01b6020830152565b9081518082526020808093019301915f5b828110611d0e575050505090565b835185529381019392810192600101611d00565b6101406003198201126101f5576001600160a01b039160043583811681036101f5579260243581811681036101f5579260443592606435926001600160401b0384116101f557611d7783608095600401611c4a565b9094909360831901126101f5576084916101043582811681036101f557916101243590811681036101f55790565b6060809160018060a01b038082511685526020820151166020850152604081015160408501520151910152565b60809060031901126101f55760405190611deb82611b87565b816001600160a01b0360043581811681036101f557825260243590811681036101f557602082015260443560408201526060606435910152565b91908260809103126101f557604051611e3d81611b87565b6060808294611e4b81611b73565b8452611e5960208201611b73565b6020850152604081013560408501520135910152565b60405190611e7c82611ba2565b60018252603160f81b6020830152565b6101443563ffffffff811681036101f55790565b3563ffffffff811681036101f55790565b6084356001600160a01b03811681036101f55790565b356001600160a01b03811681036101f55790565b903590601e19813603018212156101f557018035906001600160401b0382116101f5576020019181360383136101f557565b60803660031901126101f557604051611f2581611b87565b6001600160a01b039060043582811681036101f55781526024359082821682036101f557611f6791602082015260443560408201526064356060820152612ac3565b90608435918183168093036101f557610104359182168092036101f557610124359163ffffffff908184168094036101f557610144359182168092036101f5576040519460208601937f98191e4b891fe2d28924561cf97dec596ddf5a4070cc42455b53a05ab6b8050385526040870152606086015260a435608086015260c43560a086015260e43560c086015260e085015282610100850152610120908185015283526101408301928084106001600160401b03851117610c0d5761203293604052519020612b34565b90565b61204160408201611ec7565b9061204b81611ec7565b61206061205b3660808501611e25565b612ac3565b92612079612072610100850185611edb565b3691611c14565b602081519101209161208d60208501611ec7565b9161209b6101208601611ec7565b906120a96101808701611ea0565b936120b76101a08801611ea0565b95604051987f24ba1c68e2ba339f50981ed71cb6c98d1a28a067665f83ea649433ab0b0b74e760208b015260018060a01b0380968180961660408d015260608b013560608d01521660808b015260a08a015260c089015261014087013560e0890152610160870135610100890152166101208701521661014085015263ffffffff91828092166101608601521661018084015261018083526101a08301928084106001600160401b03851117610c0d576101806121839161203295604052602081519101209301611ea0565b1690612b34565b919081101561096d5760051b0190565b6001600160401b038111610c0d5760051b60200190565b604051906121be82611b87565b5f6060838281528260208201528260408201520152565b919081101561096d5760071b0190565b6121ee9061220e565b90815f525f80516020613cf083398151915260205260ff60405f20541690565b60405161221f602082018093611da5565b6080815260a081018181106001600160401b03821117610c0d5760405251902090565b61224b906121e5565b9190911561225557565b60405163c8e4a46f60e01b8152600490fd5b8181029291811591840414171561227a57565b634e487b7160e01b5f52601160045260245ffd5b7f0000000000000000000000000000000000000000000000000000000000000000906122ba8282612267565b83036122c557505050565b604492916122d291612267565b604051916308321cf160e21b835260048301526024820152fd5b80516001600160a01b039283169290811683146124015761230c8261220e565b94855f525f80516020613cf08339815191528060205260ff60405f2054161561225557865f52602052600160405f20019384549486860180961161227a577f8cbae5e080da81fd1c58ef2a33f027c06edacdb96dae9f16757b2a1faaa70d1196610100966123db925584865116906123d67f0000000000000000000000000000000000000000000000000000000000000000926123a98484612267565b87604051926123b784611ba2565b600d84526c131a5ad9590810dbdb5b595b9d609a1b6020850152612d81565b612267565b6123e86040518096611da5565b608085015260a08401524260c08401521660e0820152a2565b6040516315a3ed3160e01b8152600490fd5b805f525f80516020613d1083398151915260205260405f20335f5260205260ff60405f205416156124415750565b60405163e2517d3f60e01b81523360048201526024810191909152604490fd5b6001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260409020545f80516020613d108339815191529060ff166124e5575f805260205260405f20815f5260205260405f20600160ff1982541617905533905f5f80516020613c908339815191528180a4600190565b50505f90565b6001600160a01b03165f8181527f3dcf8136aea27c4e59adba4b5b5f26ca29dc6e5a703de453b2361643c43217c760205260409020547f2294cdd65f68a33a3e7097ee86a70cf0f4adf6b27328c6b154d47834bdfcdf4e91905f80516020613d108339815191529060ff1661259157825f5260205260405f20815f5260205260405f20600160ff1982541617905533915f80516020613c908339815191525f80a4600190565b5050505f90565b6001600160a01b03165f8181527ff42a8efff468fcef324535266976260ddee6dd8f36b86533dba0904c131e743060205260409020547fc590cf330eebec919872b979b32e0cfb49fcb1f4a0cef88b6b29d9a1713fb87d91905f80516020613d108339815191529060ff1661259157825f5260205260405f20815f5260205260405f20600160ff1982541617905533915f80516020613c908339815191525f80a4600190565b90815f525f80516020613d108339815191528060205260405f209160018060a01b031691825f5260205260ff60405f205416155f1461259157825f5260205260405f20815f5260205260405f20600160ff1982541617905533915f80516020613c908339815191525f80a4600190565b90815f525f80516020613d108339815191528060205260405f209160018060a01b031691825f5260205260ff60405f2054165f1461259157825f5260205260405f20815f5260205260405f2060ff19815416905533917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b6020818303126101f5578051906001600160401b0382116101f5570181601f820112156101f55780519061276082611bf9565b9261276e6040519485611bd8565b828452602083830101116101f557815f9260208093018386015e8301015290565b9190959493929380421161285c575060018060a01b03831693845f527fc84b62be2e432010aa71cc1bbdba4c7b02245544521aa5beae20093c7062240080602052604095865f20895f5260205260ff875f205416612835579761281793929161281d9798995f52602052875f20905f52602052865f20600160ff198254161790553691611c14565b91613366565b156128255750565b51638baa579f60e01b8152600490fd5b86516317a63d2160e01b81526001600160a01b0387166004820152602481018a9052604490fd5b6024906040519063313c898160e11b82526004820152fd5b919061287e6121b1565b507f9e5d0d3a4c7e8d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d02805492905f19841461227a57600184019055604051936128bf85611b87565b6001600160a01b0391821685521660208401526040830152606082015290565b8015612932577f0000000000000000000000000000000000000000000000000000000000000000808203612914575050600190565b60449250604051916308321cf160e21b835260048301526024820152fd5b505f90565b969395919096949294805f525f80516020613cf0833981519152918260205260409260ff845f205416612aab57907fd1e45d0198646a2cb926549d661424c15fd53e0e0640b7f7824446b4dcb3ac5d91835f52602052835f20600160ff19825416179055887f000000000000000000000000000000000000000000000000000000000000000095612a066129cb888c612267565b938d88519586956129df876101a094611da5565b60808701526129f160a087018d611da5565b61012086015280610140860152840190611c77565b6101608301919091526001600160a01b0389166101808301520390a28051612a2d81611ba2565b600781526610dbdb5b595b9d60ca1b602082015295612a7d575b5083612a56575b505050505050565b612a66612a6c92612a7297613296565b93612267565b91612d81565b5f8080808080612a4e565b90945051612a8a81611ba2565b600d81526c436f6d6d656e74205265706c7960981b6020820152935f612a47565b83516345ee5b0b60e11b815260048101849052602490fd5b60018060a01b0380602083015116916060604082015192825116910151906040519260208401947ff50b5c2dfba3cda25b5ff058b098c69c9663b57c8f7fa26975400600bdc66cb6865260408501526060840152608083015260a082015260a08152612b2e81611bbd565b51902090565b604291612b3f613b5e565b90612b48613bc8565b906040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85526040840152606083015260808201523060a082015260a08152612b9781611bbd565b519020906040519161190160f01b8352600283015260228201522090565b90600182811c92168015612be3575b6020831014612bcf57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612bc4565b604051905f825f80516020613cb083398151915291825492612c0e84612bb5565b80845293602091600191828116908115612c9c5750600114612c3c575b505050612c3a92500383611bd8565b565b5f9081527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d9590935091905b828410612c845750612c3a9450505081016020015f8080612c2b565b85548885018301529485019487945092810192612c68565b9250505060209250612c3a94915060ff191682840152151560051b8201015f8080612c2b565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10391825492612cf684612bb5565b80845293602091600191828116908115612c9c5750600114612d2157505050612c3a92500383611bd8565b5f9081527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b759590935091905b828410612d695750612c3a9450505081016020015f8080612c2b565b85548885018301529485019487945092810192612d4d565b6001600160a01b0393918416928315801593919291906130c45760ff60035b16612daa8161219a565b946040968791612dbc83519889611bd8565b838852612dc88461219a565b95602092838a0192601f19809901368537612e22612de58861219a565b97612df28851998a611bd8565b8089528a612dff8261219a565b0136888b0137612e1a612e118261219a565b98519889611bd8565b80885261219a565b8686019901368a371561302a5788600a02600a81048a0361227a576064900490612e4b8b6132fd565b8d7f000000000000000000000000000000000000000000000000000000000000000016905281612e7a886132fd565b52600162ce1e1f60e01b0319612e8f876132fd565b5289601402601481048b0361227a57612edd928c92612eb46064612ed894049461330a565b5282612ebf8a61330a565b5263eb4a589f60e01b612ed18961330a565b528b61332a565b61332a565b908b612ee88b61331a565b91169052612ef58561331a565b5263139e73d560e11b612f078461331a565b525b897f00000000000000000000000000000000000000000000000000000000000000001697883b156101f557969493929089989698519a8b9863300def9560e01b8a5260848a0190608060048c01525180915260a48a0192915f905b82821061300d5750505050612f87839160031995868b83030160248c0152611cef565b91848984030160448a015251918281520197915f5b828110612fec5750505050612fbf868694938593845f9a03016064850152611c77565b03925af18015612fe257612fd1575050565b6001600160401b038211610c0d5752565b50513d5f823e3d90fd5b83516001600160e01b0319168a52988101988b985092810192600101612f9c565b8351811685528e9b50938601939286019260019190910190612f64565b5087601e02601e8104890361227a57606461309491046130498b6132fd565b8d7f000000000000000000000000000000000000000000000000000000000000000016905280613078886132fd565b52600162ce1e1f60e01b031961308d876132fd565b528961332a565b908b61309f8b61330a565b911690526130ac8561330a565b5263139e73d560e11b6130be8461330a565b52612f09565b60ff6002612da0565b908160209103126101f5575180151581036101f55790565b90916001600160a01b038082168061314c575b50602083019281845116916131188460408401948551848651169161343b565b612a4e578061312e955116925191511691613579565b1561313a57156105a057565b60405163d8a26f9960e01b8152600490fd5b823b156131ce5760208285511660246040518094819363145c351b60e31b835260048301525afa908115611825575f9161319f575b501561318d575f6130f8565b60405163ee4e75cf60e01b8152600490fd5b6131c1915060203d6020116131c7575b6131b98183611bd8565b8101906130cd565b5f613181565b503d6131af565b6040516313ac866760e21b8152600490fd5b906001600160a01b0380821680613236575b50602083019281845116916132128460408401948551848651169161343b565b61322f5780613228955116925191511691613579565b1561313a57565b5050505050565b823b156131ce5760208285511660246040518094819363145c351b60e31b835260048301525afa908115611825575f91613277575b501561318d575f6131f2565b613290915060203d6020116131c7576131b98183611bd8565b5f61326b565b81516001600160a01b039291908316156132b05750511690565b905061203291506136e2565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156132eb57565b604051631afcd79f60e31b8152600490fd5b80511561096d5760200190565b80516001101561096d5760400190565b80516002101561096d5760600190565b9190820391821161227a57565b3d15613361573d9061334882611bf9565b916133566040519384611bd8565b82523d5f602084013e565b606090565b9091813b6133b55761337891926137b1565b5060048110156133a15715918261338e57505090565b6001600160a01b03918216911614919050565b634e487b7160e01b5f52602160045260245ffd5b5f9182916040516133f8816133ea6020820194630b135d3f60e11b998a87526024840152604060448401526064830190611c77565b03601f198101835282611bd8565b51915afa90613405613337565b8261342d575b8261341557505090565b9091506020818051810103126101f557602001511490565b91506020825110159161340b565b92919061344881856137eb565b1561352a57506040516317aa5fb760e11b8082526001600160a01b03928316600483015290936020939192908116918486602481865afa958615611825575f9661350b575b50851561349d575b505050505090565b9091929394501680151592836134bd575b50505090505f80808080613495565b849293506024906040519485938492835260048301525afa918215611825575f926134ee575b5050805f80806134ae565b6135049250803d106131c7576131b98183611bd8565b5f806134e3565b613523919650853d87116131c7576131b98183611bd8565b945f61348d565b929190613538908484613852565b928315613546575b50505090565b6001600160a01b03821615159350909183613567575b5050505f8080613540565b6135719350613852565b5f808061355c565b9061358481836137eb565b1561369d57506040516370a0823160e01b8082526001600160a01b039384166004830152929091602091908116908284602481855afa938415611825575f9461366e575b50670de0b6b3a7640000809410958615966135e7575b50505050505090565b90919293949550168015159485613609575b50505050505f80808080806135de565b839495506024906040949394519485938492835260048301525afa918215611825575f92613640575b505010155f808080806135f9565b90809250813d8311613667575b6136578183611bd8565b810103126101f557515f80613632565b503d61364d565b9093508281813d8311613696575b6136868183611bd8565b810103126101f55751925f6135c8565b503d61367c565b9290916136ab9084846138c0565b9283156136b85750505090565b6001600160a01b038216151593509091836136d8575050505f8080613540565b61357193506138c0565b60208101805160408301516001600160a01b03939161370391908516613952565b8381166137475750613714906139cf565b828116613741575081613728915116613a2b565b908116612032576040516306e6537360e01b8152600490fd5b91505090565b9250505090565b90613775575080511561376357805190602001fd5b60405163d6bda27560e01b8152600490fd5b815115806137a8575b613786575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561377e565b81519190604183036137e1576137da9250602082015190606060408401519301515f1a90613c0d565b9192909190565b50505f9160029190565b901590816137f7575090565b6040516301ffc9a760e01b81526330261b2560e11b60048201529150602090829060249082906001600160a01b03165afa908115611825575f91613839575090565b612032915060203d6020116131c7576131b98183611bd8565b6040516311de81c360e11b81526001600160a01b039384166004820152602481019290925260026044830152909160209183916064918391165afa5f918161389f575b5061203257505f90565b6138b991925060203d6020116131c7576131b98183611bd8565b905f613895565b604051627eeac760e11b81526001600160a01b0393841660048201526024810192909252909160209183916044918391165afa5f918161390a575b5061390557505f90565b151590565b9091506020813d602011613936575b8161392660209383611bd8565b810103126101f55751905f6138fb565b3d9150613919565b51906001600160a01b03821682036101f557565b9061395d90826137eb565b61396657505f90565b604051633fb80b1560e01b815290602090829060049082906001600160a01b03165afa5f918161399a575061203257505f90565b9091506020813d6020116139c7575b816139b660209383611bd8565b810103126101f5576138b99061393e565b3d91506139a9565b6020818101516040928301519251631793810160e21b81526004810193909352829060249082906001600160a01b03165afa5f918161399a575061203257505f90565b51906bffffffffffffffffffffffff821682036101f557565b6040516379502c5560e01b81526001600160a01b03918216919060c081600481865afa5f9181613ade575b50613ad0575b50602060049260405193848092638da5cb5b60e01b82525afa5f9281613a94575b50613a885750505f90565b811661203257806124e5565b9092506020813d602011613ac8575b81613ab060209383611bd8565b810103126101f557613ac19061393e565b915f613a7d565b3d9150613aa3565b81168015613a5c5791505090565b90915060c0813d60c011613b56575b81613afa60c09383611bd8565b810103126101f557613b0b8161393e565b50613b1860208201613a12565b5060408101519083821682036101f55760a081613b3a6060613b4e9401613a12565b50613b476080820161393e565b5001613a12565b50905f613a56565b3d9150613aed565b613b66612bed565b8051908115613b76576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100548015613ba35790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b613bd0612cc2565b8051908115613be0576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101548015613ba35790565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613c84579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611825575f516001600160a01b03811615613c7a57905f905f90565b505f906001905f90565b5050505f916003919056fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0da16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9e5d0d3a4c7e8d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d0002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220a23a44bd56ac0ddf87f4951773e4041fe2cd29ca9a0e31d5666ba217db0ce96664736f6c63430008190033000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000004053f4c3ae37a36e4061ae2cff4b3e370633c4b20000000000000000000000002730b29acbbcd34a59b720338e8d06619fd71aca