0 txs
14 calls
constructor
constructor()
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
contractAddressManager
viewfunction contractAddressManager() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
directRepliesInRange
viewfunction directRepliesInRange(address targetContract, uint256 parentId, uint256 fromIdx, uint256 maxLength) view returns (tuple[] result)
directReplyCount
viewfunction directReplyCount(address targetContract, uint256 targetId) view returns (uint256 count)
expectedSigner
viewfunction expectedSigner() view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
OWNER_ROLE
viewfunction OWNER_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
repliesByAuthorInRange
viewfunction repliesByAuthorInRange(uint256 author, uint256 fromIdx, uint256 maxLength) view returns (tuple[] result)
repliesById
viewfunction repliesById(uint256[] replyIds) view returns (tuple[] result)
replyCount
viewfunction replyCount() view returns (uint256)
signatureUsed
viewfunction signatureUsed(bytes) view returns (bool)
signatureVerifier
viewfunction signatureVerifier() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
targetExistsAndAllowedForId
viewfunction targetExistsAndAllowedForId(uint256 targetId) view returns (bool exist, bool allowed)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
addAdmin
nonpayablefunction addAdmin(address admin)
addReply
nonpayablefunction addReply(address targetContract, uint256 targetId, string content, string metadata)
editReply
nonpayablefunction editReply(uint256 replyId, string content, string metadata)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address owner, address admin, address expectedSigner, address signatureVerifier, address contractAddressManagerAddr)
pause
nonpayablefunction pause()
removeAdmin
nonpayablefunction removeAdmin(address admin)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
unpause
nonpayablefunction unpause()
updateContractAddressManager
nonpayablefunction updateContractAddressManager(address contractAddressesAddr)
updateExpectedSigner
nonpayablefunction updateExpectedSigner(address signer)
updateOwner
nonpayablefunction updateOwner(address owner)
updateSignatureVerifier
nonpayablefunction updateSignatureVerifier(address sinatureVerifier)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
ReplyAdded
event ReplyAdded(uint256 author, address indexed targetContract, uint256 indexed replyId)
ReplyEdited
event ReplyEdited(uint256 author, uint256 replyId)
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)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
InvalidSignature
error InvalidSignature()
NoReplyFound
error NoReplyFound(uint256 replyId)
NotInitializing
error NotInitializing()
OnlyAuthorCanEdit
error OnlyAuthorCanEdit()
SignatureWasUsed
error SignatureWasUsed()
TargetNotFound
error TargetNotFound(address targetContract, uint256 targetId)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a06040523461003257610011610037565b6040516131966101c182396080518181816126cb0152612846015261319690f35b600080fd5b61003f61007e565b610047610112565b565b61005d90610060906001600160a01b031682565b90565b6001600160a01b031690565b61005d90610049565b61005d9061006c565b610086610094565b61008f30610075565b608052565b61004761003f565b61005d9060401c60ff1690565b61005d905461009c565b61005d905b6001600160401b031690565b61005d90546100b3565b61005d906100b8906001600160401b031682565b906100f261005d61010e926100ce565b82546001600160401b0319166001600160401b03919091161790565b9055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061013c816100a9565b6101ae57610149816100c4565b6001600160401b0391908290811603610160575050565b8161018f7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2936101a9936100e2565b604051918291826001600160401b03909116815260200190565b0390a1565b63f92ee8a960e01b6000908152600490fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461026257806308473f641461025d5780631459457a146102585780631785f53c146102535780631f786ffc1461024e578063248a9ca3146102495780632bdd87ff146102445780632cb3e4941461023f5780632f2ff15d1461023a57806336568abe146102355780633f4ba83a146102305780634f1ef2861461022b57806352d1902d1461022657806355c0f037146102215780635667981b1461021c5780635c975abb14610217578063704802751461021257806375b238fc1461020d5780637bdfc31d146102085780637ea7601e146102035780638456cb59146101fe578063880cdc31146101f95780639010d07c146101f4578063916a0386146101ef57806391d14854146101ea578063a12c64b5146101e5578063a217fddf146101e0578063a3246ad3146101db578063ad3cb1cc146101d6578063ade9ae97146101d1578063bb10c829146101cc578063c0a73969146101c7578063ca15c873146101c2578063d547741f146101bd578063e58378bb146101b8578063f2e2c693146101b35763fde919f60361027a57610e72565b610e4a565b610dc2565b610da9565b610d8e565b610d73565b610cb4565b610be4565b610b72565b610af5565b610a6a565b610a0f565b6109f3565b6109d8565b61099a565b610966565b61094e565b610935565b6108c6565b610876565b61085e565b610843565b61082b565b61080f565b6107d8565b6107c4565b6106b5565b61069c565b610683565b610632565b6105e5565b6105ba565b61057b565b61039b565b61037f565b610316565b6102a9565b6001600160e01b031981165b0361027a57565b600080fd5b9050359061028c82610267565b565b9060208282031261027a576102a29161027f565b90565b9052565b3461027a576102d66102c46102bf36600461028e565b610e8d565b60405191829182901515815260200190565b0390f35b6001600160a01b031690565b6001600160a01b038116610273565b9050359061028c826102e6565b9060208282031261027a576102a2916102f5565b3461027a5761032e610329366004610302565b610f1e565b604051005b919060a08382031261027a5761034981846102f5565b9261035782602083016102f5565b926102a261036884604085016102f5565b93608061037882606087016102f5565b94016102f5565b3461027a5761032e610392366004610333565b939290926111ab565b3461027a5761032e6103ae366004610302565b6111ee565b80610273565b9050359061028c826103b3565b60808183031261027a576103da82826102f5565b926102a26103eb84602085016103b9565b9360606103fb82604087016103b9565b94016103b9565b60005b8381106104155750506000910152565b8181015183820152602001610405565b61044661044f6020936104599361043a815190565b80835293849260200190565b95869101610402565b601f01601f191690565b0190565b8051151582526020808201516001600160a01b0316908301526102a2916101006104e2610120830161049460408601516040860152565b6104a360608601516060860152565b6104b260808601516080860152565b6104c160a086015160a0860152565b6104d060c086015160c0860152565b60e085015184820360e0860152610425565b92015190610100818403910152610425565b906102a29161045d565b9061051461050a835190565b8083529160200190565b90816105266020830284019460200190565b926000915b83831061053a57505050505090565b9091929394602061055d610556838560019503875289516104f4565b9760200190565b930193019193929061052b565b60208082526102a2929101906104fe565b3461027a576102d661059a6105913660046103c6565b929190916115a9565b6040519182918261056a565b9060208282031261027a576102a2916103b9565b3461027a576102d66105d56105d03660046105a6565b61167f565b6040519182918290815260200190565b3461027a5761032e6105f8366004610302565b6116d3565b600091031261027a57565b6102a2916008021c6001600160a01b031690565b906102a29154610608565b6102a260008061061c565b3461027a576106423660046105fd565b6102d661064d610627565b604051918291826001600160a01b03909116815260200190565b919060408382031261027a576102a290602061037882866103b9565b3461027a5761032e610696366004610667565b906116f7565b3461027a5761032e6106af366004610667565b90611701565b3461027a576106c53660046105fd565b61032e6118c5565b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b0382111761070457604052565b6106cd565b9061028c61071660405190565b92836106e3565b6001600160401b03811161070457602090601f01601f19160190565b90826000939282370152565b9092919261075a6107558261071d565b610709565b938185528183011161027a5761028c916020850190610739565b9080601f8301121561027a578160206102a293359101610745565b91909160408184031261027a576107a683826102f5565b9260208201356001600160401b03811161027a576102a29201610774565b61032e6107d236600461078f565b906118ed565b3461027a576107e83660046105fd565b6102d66105d561193a565b919060408382031261027a576102a29060206103fb82866102f5565b3461027a576102d66105d56108253660046107f3565b90611944565b3461027a5761032e61083e366004610302565b611987565b3461027a576108533660046105fd565b6102d66102c4611990565b3461027a5761032e610871366004610302565b6119cb565b3461027a576108863660046105fd565b6102d66000805160206131418339815191526105d5565b909160608284031261027a576102a26108b684846103b9565b9360406103fb82602087016103b9565b3461027a576102d661059a6108dc36600461089d565b916119d4565b9160608383031261027a576108f782846103b9565b9260208101356001600160401b03811161027a5783610917918301610774565b9260408201356001600160401b03811161027a576102a29201610774565b3461027a5761032e6109483660046108e2565b91611dde565b3461027a5761095e3660046105fd565b61032e611e4c565b3461027a5761032e610979366004610302565b611ea4565b919060408382031261027a576102a29060206103fb82866103b9565b3461027a576102d661064d6109b036600461097e565b90611ead565b6102a2916008021c81565b906102a291546109b6565b6102a2600060366109c1565b3461027a576109e83660046105fd565b6102d66105d56109cc565b3461027a576102d66102c4610a09366004610667565b90611eee565b3461027a57610a27610a223660046105a6565b611f24565b906102d6610a3460405190565b928392839015158152901515602082015260400190565b6102a26102a26102a29290565b6102a26000610a4b565b6102a2610a58565b3461027a57610a7a3660046105fd565b6102d66105d5610a62565b90610aa5610a9e610a94845190565b8084529260200190565b9260200190565b9060005b818110610ab65750505090565b909192610adc610ad560019286516001600160a01b0316815260200190565b9460200190565b929101610aa9565b60208082526102a292910190610a85565b3461027a576102d6610b10610b0b3660046105a6565b611f53565b60405191829182610ae4565b90610b296107558361071d565b918252565b610b386005610b1c565b640352e302e360dc1b602082015290565b6102a2610b2e565b6102a2610b49565b6102a2610b51565b60208082526102a292910190610425565b3461027a57610b823660046105fd565b6102d6610b8d610b59565b60405191829182610b61565b6102a26000600361061c565b6102a2906102da906001600160a01b031682565b6102a290610ba5565b6102a290610bb9565b6102a590610bc2565b60208101929161028c9190610bcb565b3461027a57610bf43660046105fd565b6102d6610bff610b99565b60405191829182610bd4565b9060208282031261027a5781356001600160401b03811161027a576102a29201610774565b610459610c4892602092610c42815190565b94859290565b93849101610402565b610b296104599160209493610c30565b610c76610c6d60405190565b92839283610c51565b03902090565b6102a291610c61565b6102a2916008021c5b60ff1690565b906102a29154610c85565b6000610caf6102a2926002610c7c565b610c94565b3461027a576102d66102c4610cca366004610c0b565b610c9f565b6001600160401b0381116107045760208091020190565b90929192610cf661075582610ccf565b938185526020808601920283019281841161027a57915b838310610d1a5750505050565b60208091610d2884866103b9565b815201920191610d0d565b9080601f8301121561027a578160206102a293359101610ce6565b9060208282031261027a5781356001600160401b03811161027a576102a29201610d33565b3461027a576102d661059a610d89366004610d4e565b611f6a565b3461027a576102d66105d5610da43660046105a6565b611fd9565b3461027a5761032e610dbc366004610667565b9061200b565b3461027a57610dd23660046105fd565b6102d66000805160206131018339815191526105d5565b9060808282031261027a57610dfe81836102f5565b92610e0c82602085016103b9565b9260408101356001600160401b03811161027a5783610e2c918301610774565b9260608201356001600160401b03811161027a576102a29201610774565b3461027a5761032e610e5d366004610de9565b929190916123aa565b6102a26000600161061c565b3461027a57610e823660046105fd565b6102d661064d610e66565b635a05180f60e01b6001600160e01b0319821614908115610eac575090565b6102a291506123b6565b61028c90610ed66000805160206131418339815191526123f0565b6123f0565b610f0b565b906001600160a01b03905b9181191691161790565b90610f006102a2610f0792610bc2565b8254610edb565b9055565b610f1761028c91610bc2565b6003610ef0565b61028c90610eb6565b6102a29060401c610c8e565b6102a29054610f27565b6102a2905b6001600160401b031690565b6102a29054610f3d565b610f426102a26102a29290565b906001600160401b0390610ee6565b610f426102a26102a2926001600160401b031690565b90610f9a6102a2610f0792610f74565b8254610f65565b9068ff00000000000000009060401b610ee6565b90610fc56102a2610f0792151590565b8254610fa1565b6102a590610f58565b60208101929161028c9190610fcc565b92939091907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0094859261102761102161101d86610f33565b1590565b94610f4e565b9460009661103488610f58565b6001600160401b038816148061113a575b6001976110616110548a610f58565b916001600160401b031690565b149081611112575b155b9081611109575b506110f6579061109f94939291866110968a61108d8b610f58565b9c019b8c610f8a565b6110e757611141565b6110a857505050565b6110d66110e2927fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d294610fb5565b60405191829182610fd5565b0390a1565b6110f1888b610fb5565b611141565b63f92ee8a960e01b8852600488fd5b0390fd5b15905038611072565b905061106b61112030610bc2565b3b61113161112d8c610a4b565b9190565b14919050611069565b5085611045565b9061028c9493929161115281612411565b9061028c9493929161116382612411565b9061028c9493929161117483612411565b9061028c9493929161118584612411565b9061028c9493929161119685612411565b906111a3949392916124fe565b61028c612513565b9061028c94939291610fe5565b61028c906111d36000805160206131018339815191526123f0565b6111eb9060008051602061314183398151915261251b565b50565b61028c906111b8565b9061120190610bc2565b600052602052604060002090565b9061120190610a4b565b6102a29081565b6102a29054611219565b90611245611239610a94845490565b92600052602060002090565b9060005b8181106112565750505090565b90919261127a61127360019261126b87611220565b815260200190565b9460010190565b929101611249565b906102a29161122a565b9061028c6112a69261129d60405190565b93848092611282565b03836106e3565b6102a29061128c565b90610b2961075583610ccf565b6102a2610120610709565b6112d66112c3565b9060008252602080808080808080808a0160008152016000815201600081520160008152016000815201600081520160608152016060905250565b6102a26112ce565b60005b82811061132857505050565b602090611333611311565b818401520161131c565b9061028c61135361134d846112b6565b93610ccf565b601f190160208401611319565b634e487b7160e01b600052601160045260246000fd5b9190820180921161138357565b611360565b634e487b7160e01b600052603260045260246000fd5b906113a7825190565b8110156113b8576020809102010190565b611388565b6102a290610c8e565b6102a290546113bd565b6102a29060081c6102da565b6102a290546113d0565b634e487b7160e01b600052602260045260246000fd5b906001600283049216801561141c575b602083101461141757565b6113e6565b91607f169161140c565b80546000939291611443611439836113fc565b8085529360200190565b9160018116908115611495575060011461145c57505050565b61146f9192939450600052602060002090565b916000925b8184106114815750500190565b805484840152602090930192600101611474565b92949550505060ff1916825215156020020190565b906102a291611426565b9061028c6112a6926114c560405190565b938480926114aa565b9061028c61159860076114df6112c3565b946114f26114ec826113c6565b15158752565b61150e6114fe826113dc565b6001600160a01b03166020880152565b61152461151d60018301611220565b6040880152565b61153a61153360028301611220565b6060880152565b61155061154960038301611220565b6080880152565b61156661155f60048301611220565b60a0880152565b61157c61157560058301611220565b60c0880152565b61159261158b600683016114b4565b60e0880152565b016114b4565b610100840152565b6102a2906114ce565b929190816115d46115cf6115e2936115ca6115c2606090565b9860396111f7565b61120f565b6112ad565b936115dd855190565b612581565b926115ed6000610a4b565b841461167257506115fd8361133d565b93849061160a6000610a4b565b855b811015611669576116628161164661164161163a61163661163061160c978b611376565b8b61139e565b5190565b603761120f565b6115a0565b611650828b61139e565b5261165b818a61139e565b5060010190565b905061160a565b50935093505050565b9250505090565b90611201565b60016116a96102a292611690600090565b5060006000805160206131218339815191525b01611679565b01611220565b61028c906116ca6000805160206131418339815191526123f0565b61028c906125fd565b61028c906116af565b9061028c916116ed610ed18261167f565b906111eb91612606565b9061028c916116dc565b9061170b336102da565b6001600160a01b03821603611723576111eb9161251b565b63334bd91960e11b6000908152600490fd5b036000fd5b6102a2906102da565b6102a2905461173a565b6117576019610b1c565b7f4554484f535f494e544552414354494f4e5f434f4e54524f4c00000000000000602082015290565b6102a261174d565b6102a2611780565b9050519061028c826102e6565b9060208282031261027a576102a291611790565b6040513d6000823e3d90fd5b6001600160a01b03909116815260408101929161028c9160200152565b61181d60206117f16117ec6003611743565b610bc2565b6117f9611788565b9061180360405190565b9384928391829163d57f7aa360e01b835260048301610b61565b03915afa9081156118b857600091611889575b50611843335b916001600160a01b031690565b036118505761028c6118bd565b63e2517d3f60e01b60009081526117357f261fea28325784de45eba41a3fbb84c4196fbab02ee802566edfe26616ba5afb3360046117bd565b6118ab915060203d6020116118b1575b6118a381836106e3565b81019061179d565b38611830565b503d611899565b6117b1565b61028c6126b8565b61028c6117da565b9061028c916118da6126c0565b9061028c916118e881612768565b612771565b9061028c916118cd565b6102a290611903612830565b611931565b6102a27f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610a4b565b506102a2611908565b6102a260006118f7565b6102a2916115ca61195f92611957600090565b5060396111f7565b5490565b61028c9061197e6000805160206131418339815191526123f0565b61028c9061288a565b61028c90611963565b6102a2612893565b61028c906119b36000805160206131018339815191526123f0565b6111eb90600080516020613141833981519152612606565b61028c90611998565b91906119ea816115d46115cf606096603861120f565b926119f56000610a4b565b84146116725750611a058361133d565b938490611a126000610a4b565b855b81101561166957611a388161164661164161163a611636611630611a14978b611376565b9050611a12565b9061028c9291611a4d6128bc565b611c6a565b611a5c600d610b1c565b6c4554484f535f50524f46494c4560981b602082015290565b6102a2611a52565b6102a2611a75565b9050519061028c826103b3565b9060208282031261027a576102a291611a85565b9160001960089290920291821b911b610ee6565b9190611acb6102a2610f0793610a4b565b908354611aa6565b61028c91600091611aba565b818110611aea575050565b80611af86000600193611ad3565b01611adf565b9190601f8111611b0d57505050565b611b1f61028c93600052602060002090565b906020601f840181900483019310611b41575b6020601f909101040190611adf565b9091508190611b32565b90611b54815190565b906001600160401b03821161070457611b7782611b7185546113fc565b85611afe565b602090601f8311600114611bb257610f07929160009183611ba7575b5050600019600883021c1916906002021790565b015190503880611b93565b601f19831691611bc785600052602060002090565b9260005b818110611c0557509160029391856001969410611bec575b50505002019055565b01516000196008601f8516021c19169055388080611be3565b91936020600181928787015181550195019201611bcb565b9061028c91611b4b565b60001981146113835760010190565b9060001990610ee6565b90611c506102a2610f0792610a4b565b8254611c36565b90815260408101929161028c9160200152565b9091611c866020611c7e6117ec6003611743565b6117f9611a7d565b03915afa9081156118b857611ca7916117ec91600091611dbf575b50610bc2565b906020611cb360405190565b63b8861c2360e01b815233600482015292839060249082905afa9182156118b857600092611d8e575b50611ce6836128dc565b6037611cf760016116a9868461120f565b839003611d7c57611d4f84826115ca611d6795611d437fe0857c7936e666a3506059b3a1cb34a6140a9b35298ce54fb483fda8f26db8dc9a6006611d3d8760059a61120f565b01611c1d565b6007611d3d858561120f565b01611d61611d5c82611220565b611c27565b90611c40565b6110e2611d7360405190565b92839283611c57565b639b29373160e01b6000908152600490fd5b611db191925060203d602011611db8575b611da981836106e3565b810190611a92565b9038611cdc565b503d611d9f565b611dd8915060203d6020116118b1576118a381836106e3565b38611ca1565b9061028c9291611a3f565b611dfb60206117f16117ec6003611743565b03915afa9081156118b857600091611e25575b50611e1833611836565b036118505761028c611e44565b611e3e915060203d6020116118b1576118a381836106e3565b38611e0e565b61028c61297b565b61028c611de9565b61028c90611e6f6000805160206131018339815191526123f0565b6111eb90600080516020613101833981519152611e9e611e98611e926000610a4b565b83611ead565b8261251b565b50612606565b61028c90611e54565b90611ee96102a26102a293611ec0600090565b5060007fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006116a3565b61298c565b6102a2916000611f19611f1f93611f03600090565b50826000805160206131218339815191526116a3565b016111f7565b6113c6565b60046116a96102a2611f4093611f38600090565b50603761120f565b611f4d61112d6000610a4b565b11908190565b611f656102a26102a292611ec0606090565b6129c0565b90611f7b611f76835190565b61133d565b9182611f876000610a4b565b611f926102a2845190565b811015611fd35780611fb9611641611fb0611636611fce958861139e565b61163a816128dc565b611fc3828861139e565b5261165b818761139e565b611f87565b50925050565b611feb6102a26102a292611ec0600090565b6129cc565b9061028c91612001610ed18261167f565b906111eb9161251b565b9061028c91611ff0565b9061028c93929161202581612411565b9061028c9392916120346128bc565b6121a9565b80548210156113b857612053600191600052602060002090565b91020190600090565b90815491600160401b831015610704578261207f91600161028c95018155612039565b90611aba565b9060ff90610ee6565b9061209e6102a2610f0792151590565b8254612085565b90610100600160a81b039060081b610ee6565b906120c86102a2610f0792610bc2565b82546120a5565b61028c916007906121989061010090612109856120f56120ef8451151590565b8261208e565b60208301516001600160a01b0316906120b8565b612120612117604083015190565b60018701611c40565b61213761212e606083015190565b60028701611c40565b61214e612145608083015190565b60038701611c40565b61216561215c60a083015190565b60048701611c40565b61217c61217360c083015190565b60058701611c40565b61219361218a60e083015190565b60068701611c1d565b015190565b9101611c1d565b9061028c916120cf565b906121bc6020611c7e6117ec6003611743565b03915afa9081156118b8576121dc916117ec91600091611dbf5750610bc2565b9360206121e860405190565b63b8861c2360e01b815233600482015295869060249082905afa9485156118b857600095612389575b5061221b836129e2565b93841561237a5761223260046116a985603761120f565b60009061224161112d83610a4b565b1461236157505b6122526036611220565b9485846122608760396111f7565b9061226a9161120f565b906122749161205c565b8561228088603861120f565b9061228a9161205c565b15926122946112c3565b93151584526001600160a01b03851660208501526122b3876040860152565b6122be866060860152565b60808401526122ce4260a0850152565b6122d86000610a4b565b60c084015260e08301526101008201526122f383603761120f565b906122fd9161219f565b61230690610bc2565b9061231090610a4b565b9161231a60405190565b9081527fd7dbc204867e6f66a76b882103db624d7ede8b21cf74c0a2c9a28557bf386add90602090a361234d6036611220565b61235690611c27565b61028c906036611c40565b633f2dc18160e11b8152806111058587600484016117bd565b6123848385612a2d565b612248565b6123a391955060203d602011611db857611da981836106e3565b9338612211565b9061028c939291612015565b637965db0b60e01b6001600160e01b03198216149081156123d5575090565b6102a291506001600160e01b0319166301ffc9a760e01b1490565b61028c903390612abd565b6102da6102a26102a29290565b6102a2906123fb565b6000906124236118366102da84612408565b1461242b5750565b63d92e233d60e01b8152600490fd5b9061028c9493929161244a612aec565b92909391600061245981612408565b6001600160a01b0381166001600160a01b038716149081156124e1575b81156124c5575b5061242b5750610f176124b0936117ec6111eb97969461249c94612b2e565b600080516020613101833981519152612606565b50600080516020613141833981519152612606565b6001600160a01b031690506001600160a01b038516143861247d565b90506001600160a01b0381166001600160a01b0388161490612476565b9061028c9493929161243a565b61028c612aec565b61028c61250b565b907fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000906125488184612b38565b9283612555575b50505090565b61256b92612566916102a291611679565b612bd9565b5038808061254f565b9190820391821161138357565b909161258d6000610a4b565b821480156125d3575b80156125c9575b6125bc576125aa91612574565b90818111156125b7575090565b905090565b5050506102a26000610a4b565b508181101561259d565b506125de6000610a4b565b8314612596565b61028c906125f281612411565b61028c906000610ef0565b61028c906125e5565b907fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000906126338184612c0b565b928361263f5750505090565b61256b92612650916102a291611679565b612c7c565b61265d612c9c565b61028c61268e6000807fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005b0161208e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6110e23361064d565b61028c612655565b6126c930610bc2565b7f0000000000000000000000000000000000000000000000000000000000000000906126fd6001600160a01b038316611836565b1490811561271f575b5061270d57565b63703e46dd60e11b6000908152600490fd5b905061273c61183661272f612cbf565b926001600160a01b031690565b141538612706565b61028c9061275f6000805160206131018339815191526123f0565b61028c90612411565b61028c90612744565b9061277e6117ec83610bc2565b90602061278a60405190565b6352d1902d60e01b815292839060049082905afa6000928161280f575b506127d957505060016127b75750565b634c9c8ce360e01b60009081526001600160a01b039091166004526024036000fd5b9092916127e76102a2611908565b84036127f85761028c929350612cd5565b632a87526960e21b60009081526004859052602490fd5b61282991935060203d602011611db857611da981836106e3565b91386127a7565b61283930610bc2565b61286b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016611836565b0361270d57565b61028c9061287f81612411565b61028c906001610ef0565b61028c90612872565b6102a27fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033006113c6565b6128c4611990565b6128ca57565b63d93c066560e01b6000908152600490fd5b6128ec60046116a983603761120f565b906000916128fc61112d84610a4b565b14612905575050565b63f3a4dddd60e01b82526004820152602490fd5b6129216128bc565b61028c612951600160007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300612688565b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110e23361064d565b61028c612919565b6102a290610a4b565b6129b66129b16102a2936129ac60006129bb956129a7600090565b500190565b612d3e565b612983565b6123fb565b610bb9565b6060906125b790612dc7565b6129dd60006102a2926129a7600090565b612ddc565b6129f16118366102da30610bc2565b1490565b801515610273565b9050519061028c826129f5565b919060408382031261027a576102a2906020612a2682866129fd565b94016129fd565b612a396117ec82610bc2565b6040805163a12c64b560e01b81526004810185905291829060249082905afa80156118b857612a6e91600091612a8f57501590565b612a76575050565b633f2dc18160e11b6000908152916117359160046117bd565b612ab1915060403d604011612ab6575b612aa981836106e3565b810190612a0a565b501590565b503d612a9f565b90612acb61101d8284611eee565b612ad3575050565b63e2517d3f60e01b6000908152916117359160046117bd565b612af761101d612df0565b612afd57565b631afcd79f60e31b6000908152600490fd5b9061028c91612b1c612aec565b90612b2961028c926125fd565b61288a565b9061028c91612b0f565b600080516020613121833981519152612b518383611eee565b15612bbf576000612b6c8482611f198682612b719701611679565b61208e565b612b8b612b85612b7f339390565b93610bc2565b91610bc2565b917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b612bb660405190565b600090a4600190565b505050600090565b6102a29081906001600160a01b031681565b90612c0661112d612c01612bfc60006102a296612bf4600090565b500194610bb9565b612bc7565b610a4b565b612e72565b600080516020613121833981519152612c2761101d8484611eee565b15612bbf576001612b6c846000611f198682612c439701611679565b612c51612b85612b7f339390565b917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d612bb660405190565b90612c9761112d612c01612bfc60006102a296612bf4600090565b612f56565b612ca761101d611990565b612cad57565b638dfc202b60e01b6000908152600490fd5b6102a26000612ccf6102a2611908565b01611743565b90612cdf82612f93565b612ce882610bc2565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b612d1260405190565b600090a28051612d2561112d6000610a4b565b1115612d34576111eb91613020565b505061028c612fde565b6102a2916000612d5792612d50600090565b5001612039565b906109c1565b90612d6c611239610a94845490565b9060005b818110612d7d5750505090565b909192612d9261127360019261126b87611220565b929101612d70565b906102a291612d5d565b9061028c6112a692612db560405190565b93848092612d9a565b6102a290612da4565b60006102a291612dd5606090565b5001612dbe565b60006102a291612dea600090565b50015490565b6102a27ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610f33565b9190611acb6102a2610f079390565b634e487b7160e01b600052603160045260246000fd5b61028c91600091612e19565b80548015612e6d576000190190612e6a612e648383612039565b90612e3e565b55565b612e28565b90612e88612e838260018501611679565b611220565b612e926000610a4b565b8114612bbf57612ef06102a292600092612eeb956116a36001978893612ec0612eba86610a4b565b82612574565b88850191612ede612ecf845490565b612ed889610a4b565b90612574565b808303612ef55750505090565b612e4a565b611ad3565b612f18612f1e612f2b94612f0f612d57612f269589612039565b92839188612039565b90612e19565b888801611679565b611c40565b38808061254f565b90815491600160401b8310156107045782612f1891600161028c95018155612039565b612f6361101d8383613047565b15612f8c57612f8791612f26906001612f808461195f8482612f33565b9301611679565b600190565b5050600090565b6000813b612fa361112d83610a4b565b14612fbe579061028c91612fb86102a2611908565b01610ef0565b634c9c8ce360e01b81526001600160a01b03919091166004820152602490fd5b6000612fe981610a4b565b3411612ff25750565b63b398979f60e01b8152600490fd5b3d1561301b576130103d610b1c565b903d6000602084013e565b606090565b6000806102a29361302f606090565b50602081519101845af4613041613001565b91613072565b613060916001612e8392613059600090565b5001611679565b61306d61112d6000610a4b565b141590565b9061307d57506130d1565b81519060009161308f61112d84610a4b565b14806130bc575b61309f57505090565b639996b31560e01b82526001600160a01b03166004820152602490fd5b50803b6130cb61112d84610a4b565b14613096565b80516000906130e261112d83610a4b565b11156130f15750805190602001fd5b63d6bda27560e01b8152600490fdfeb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220e644de8a433896e154e44ee9ec7c3e50772e8a347d78ac6d51066d22ef4c704464736f6c634300081a0033