0 txs
1 call
constructor
constructor()
functions
BALLOT_TYPEHASH
viewfunction BALLOT_TYPEHASH() view returns (bytes32)
CLOCK_MODE
viewfunction CLOCK_MODE() view returns (string)
clock
viewfunction clock() view returns (uint48)
COUNTING_MODE
purefunction COUNTING_MODE() pure returns (string)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
EXTENDED_BALLOT_TYPEHASH
viewfunction EXTENDED_BALLOT_TYPEHASH() view returns (bytes32)
getProposalId
viewfunction getProposalId(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) view returns (uint256)
getVotes
viewfunction getVotes(address account, uint256 timepoint) view returns (uint256)
getVotesWithParams
viewfunction getVotesWithParams(address account, uint256 timepoint, bytes params) view returns (uint256)
hashProposal
purefunction hashProposal(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) pure returns (uint256)
hasVoted
viewfunction hasVoted(uint256 proposalId, address account) view returns (bool)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
proposalCount
viewfunction proposalCount() view returns (uint256)
proposalDeadline
viewfunction proposalDeadline(uint256 proposalId) view returns (uint256)
proposalDetails
viewfunction proposalDetails(uint256 proposalId) view returns (address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash)
proposalDetailsAt
viewfunction proposalDetailsAt(uint256 index) view returns (uint256 proposalId, address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash)
proposalEta
viewfunction proposalEta(uint256 proposalId) view returns (uint256)
proposalNeedsQueuing
viewfunction proposalNeedsQueuing(uint256 proposalId) view returns (bool)
proposalProposer
viewfunction proposalProposer(uint256 proposalId) view returns (address)
proposalSnapshot
viewfunction proposalSnapshot(uint256 proposalId) view returns (uint256)
proposalThreshold
viewfunction proposalThreshold() view returns (uint256)
proposalVotes
viewfunction proposalVotes(uint256 proposalId) view returns (uint256 againstVotes, uint256 forVotes, uint256 abstainVotes)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
quorum
viewfunction quorum(uint256 timepoint) view returns (uint256)
quorumDenominator
viewfunction quorumDenominator() view returns (uint256)
quorumNumerator
viewfunction quorumNumerator() view returns (uint256)
quorumNumerator
viewfunction quorumNumerator(uint256 timepoint) view returns (uint256)
state
viewfunction state(uint256 proposalId) view returns (uint8)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
timelock
viewfunction timelock() view returns (address)
token
viewfunction token() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
upgradeAuthority
viewfunction upgradeAuthority() view returns (address)
version
purefunction version() pure returns (string)
votingDelay
viewfunction votingDelay() view returns (uint256)
votingPeriod
viewfunction votingPeriod() view returns (uint256)
cancel
nonpayablefunction cancel(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) returns (uint256)
cancel
nonpayablefunction cancel(uint256 proposalId)
castVote
nonpayablefunction castVote(uint256 proposalId, uint8 support) returns (uint256)
castVoteBySig
nonpayablefunction castVoteBySig(uint256 proposalId, uint8 support, address voter, bytes signature) returns (uint256)
castVoteWithReason
nonpayablefunction castVoteWithReason(uint256 proposalId, uint8 support, string reason) returns (uint256)
castVoteWithReasonAndParams
nonpayablefunction castVoteWithReasonAndParams(uint256 proposalId, uint8 support, string reason, bytes params) returns (uint256)
castVoteWithReasonAndParamsBySig
nonpayablefunction castVoteWithReasonAndParamsBySig(uint256 proposalId, uint8 support, address voter, string reason, bytes params, bytes signature) returns (uint256)
execute
payablefunction execute(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) payable returns (uint256)
execute
payablefunction execute(uint256 proposalId) payable
initialize
nonpayablefunction initialize(string name, address token, address timelock, uint256 votingDelay, uint256 votingPeriod, uint256 proposalThreshold_, uint256 quorumPercentage, address _upgradeAuthority)
onERC1155BatchReceived
nonpayablefunction onERC1155BatchReceived(address, address, uint256[], uint256[], bytes) returns (bytes4)
onERC1155Received
nonpayablefunction onERC1155Received(address, address, uint256, uint256, bytes) returns (bytes4)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
propose
nonpayablefunction propose(address[] targets, uint256[] values, bytes[] calldatas, string description) returns (uint256)
queue
nonpayablefunction queue(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) returns (uint256)
queue
nonpayablefunction queue(uint256 proposalId)
relay
payablefunction relay(address target, uint256 value, bytes data) payable
setProposalThreshold
nonpayablefunction setProposalThreshold(uint256 newProposalThreshold)
setVotingDelay
nonpayablefunction setVotingDelay(uint48 newVotingDelay)
setVotingPeriod
nonpayablefunction setVotingPeriod(uint32 newVotingPeriod)
updateQuorumNumerator
nonpayablefunction updateQuorumNumerator(uint256 newQuorumNumerator)
updateTimelock
nonpayablefunction updateTimelock(address newTimelock)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
ProposalCanceled
event ProposalCanceled(uint256 proposalId)
ProposalCreated
event ProposalCreated(uint256 proposalId, address proposer, address[] targets, uint256[] values, string[] signatures, bytes[] calldatas, uint256 voteStart, uint256 voteEnd, string description)
ProposalExecuted
event ProposalExecuted(uint256 proposalId)
ProposalQueued
event ProposalQueued(uint256 proposalId, uint256 etaSeconds)
ProposalThresholdSet
event ProposalThresholdSet(uint256 oldProposalThreshold, uint256 newProposalThreshold)
QuorumNumeratorUpdated
event QuorumNumeratorUpdated(uint256 oldQuorumNumerator, uint256 newQuorumNumerator)
TimelockChange
event TimelockChange(address oldTimelock, address newTimelock)
Upgraded
event Upgraded(address indexed implementation)
VoteCast
event VoteCast(address indexed voter, uint256 proposalId, uint8 support, uint256 weight, string reason)
VoteCastWithParams
event VoteCastWithParams(address indexed voter, uint256 proposalId, uint8 support, uint256 weight, string reason, bytes params)
VotingDelaySet
event VotingDelaySet(uint256 oldVotingDelay, uint256 newVotingDelay)
VotingPeriodSet
event VotingPeriodSet(uint256 oldVotingPeriod, uint256 newVotingPeriod)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
CheckpointUnorderedInsertion
error CheckpointUnorderedInsertion()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
GovernorAlreadyCastVote
error GovernorAlreadyCastVote(address voter)
GovernorAlreadyQueuedProposal
error GovernorAlreadyQueuedProposal(uint256 proposalId)
GovernorDisabledDeposit
error GovernorDisabledDeposit()
GovernorInsufficientProposerVotes
error GovernorInsufficientProposerVotes(address proposer, uint256 votes, uint256 threshold)
GovernorInvalidProposalLength
error GovernorInvalidProposalLength(uint256 targets, uint256 calldatas, uint256 values)
GovernorInvalidQuorumFraction
error GovernorInvalidQuorumFraction(uint256 quorumNumerator, uint256 quorumDenominator)
GovernorInvalidSignature
error GovernorInvalidSignature(address voter)
GovernorInvalidVoteParams
error GovernorInvalidVoteParams()
GovernorInvalidVoteType
error GovernorInvalidVoteType()
GovernorInvalidVotingPeriod
error GovernorInvalidVotingPeriod(uint256 votingPeriod)
GovernorNonexistentProposal
error GovernorNonexistentProposal(uint256 proposalId)
GovernorNotQueuedProposal
error GovernorNotQueuedProposal(uint256 proposalId)
GovernorOnlyExecutor
error GovernorOnlyExecutor(address account)
GovernorQueueNotImplemented
error GovernorQueueNotImplemented()
GovernorRestrictedProposer
error GovernorRestrictedProposer(address proposer)
GovernorUnableToCancel
error GovernorUnableToCancel(uint256 proposalId, address account)
GovernorUnexpectedProposalState
error GovernorUnexpectedProposalState(uint256 proposalId, uint8 current, bytes32 expectedStates)
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a080604052346100c257306080525f5160206154275f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b60405161536090816100c78239608051818181610e600152610fce0152f35b6001600160401b0319166001600160401b039081175f5160206154275f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610022575b3615610018575f80fd5b610020612ec2565b005b5f3560e01c806301ffc9a7146103dc57806302a251a3146103d757806306f3f9e6146103d257806306fdde03146103cd578063143489d0146103c8578063150b7a02146103c3578063160cbed7146103be57806316e9eaec146103b95780632656227d146103b45780632d63f693146103af5780632e82db94146103aa5780632fe3e261146103a55780633932abb1146103a05780633e4f49e61461039b57806340e58ee5146103965780634385963214610391578063452115d61461038c5780634bf5d7e9146103875780634f1ef2861461038257806352d1902d1461037d578063544ffc9c1461037857806354fd4d5014610373578063567813881461036e5780635b8d0e0d146103695780635f398a141461036457806360c4247f1461035f578063790518871461035a5780637b3c71d3146103555780637d5e81e2146103505780637ecebe001461034b57806384b0196e146103465780638ff262e31461034157806391ddadf41461033c57806397c3d334146103375780639a802a6d14610332578063a7713a701461032d578063a890c91014610328578063a8f8a668146102fb578063a9a9529414610323578063ab58fb8e1461031e578063ad3cb1cc14610319578063b58131b014610314578063bc197c811461030f578063bf02975b1461030a578063c01f9e3714610305578063c28bc2fa14610300578063c59057e4146102fb578063d33219b4146102f6578063da35c664146102f1578063dd4e2ba5146102ec578063dd7d7cd9146102e7578063ddf0b009146102e2578063deaaa7cc146102dd578063e540d01d146102d8578063eb9019d4146102d3578063ece40cc1146102ce578063f23a6e61146102c9578063f8ce560a146102c4578063fc0c546a146102bf5763fe0d94c10361000e57611f02565b611ece565b611eb0565b611e3e565b611e1a565b611d88565b611d56565b611d1c565b611cc7565b611ca0565b611c41565b611c18565b611be4565b6117fc565b611b79565b611b5b565b6119a4565b6118f7565b6118ce565b611887565b611834565b611818565b61176c565b611741565b611679565b61165e565b611634565b6114fd565b61141d565b611364565b6112c7565b611272565b611245565b611217565b611197565b6110f1565b61108b565b611060565b611013565b610fbc565b610e1e565b610def565b610dd3565b610d72565b610d16565b610ce7565b610c85565b610c4b565b610b92565b610b74565b610b5d565b610b2e565b610a0c565b6107c3565b6106a0565b6105ae565b6104a8565b610470565b346104625760203660031901126104625760043563ffffffff60e01b8116809103610462576366defe7760e11b8114908115610451575b8115610440575b811561042f575b506040519015158152602090f35b6301ffc9a760e01b1490505f610421565b630271189760e51b8114915061041a565b6332a2ad4360e11b81149150610413565b5f80fd5b5f91031261046257565b34610462575f3660031901126104625760206104a063ffffffff5f51602061516b5f395f51905f525460301c1690565b604051908152f35b34610462576020366003190112610462576004356104c4612ee4565b6064811161055f576001600160d01b036104dc61373a565b16906104e6612a7a565b916001600160d01b038211610547577f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b46339979261052b906001600160d01b03841690614a26565b505060408051918252602082019290925290819081015b0390a1005b506306dfcc6560e41b5f5260d060045260245260445ffd5b63243e544560e01b5f52600452606460245260445ffd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060206105ab928181520190610576565b90565b34610462575f366003190112610462576040515f5f5160206152eb5f395f51905f52546105da81611f52565b808452906001811690811561067c5750600114610612575b61060e8361060281850382610711565b6040519182918261059a565b0390f35b5f5160206152eb5f395f51905f525f9081527fda13dda7583a39a3cd73e8830529c760837228fa4683752c823b17e10548aad5939250905b808210610662575090915081016020016106026105f2565b91926001816020925483858801015201910190929161064a565b60ff191660208086019190915291151560051b8401909101915061060290506105f2565b34610462576020366003190112610462576004355f9081525f51602061514b5f395f51905f5260209081526040909120546001600160a01b03166040516001600160a01b039091168152f35b6001600160a01b0381160361046257565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761073257604052565b6106fd565b60405190610746608083610711565b565b60405190610746604083610711565b6001600160401b03811161073257601f01601f191660200190565b92919261077e82610757565b9161078c6040519384610711565b829481845281830111610462578281602093845f960137010152565b9080601f83011215610462578160206105ab93359101610772565b34610462576080366003190112610462576107df6004356106ec565b6107ea6024356106ec565b6064356001600160401b038111610462576108099036906004016107a8565b50610812612e17565b306001600160a01b039091160361083557604051630a85bd0160e11b8152602090f35b637485328f60e11b5f5260045ffd5b6001600160401b0381116107325760051b60200190565b9080601f8301121561046257813561087281610844565b926108806040519485610711565b81845260208085019260051b82010192831161046257602001905b8282106108a85750505090565b6020809183356108b7816106ec565b81520191019061089b565b9080601f830112156104625781356108d981610844565b926108e76040519485610711565b81845260208085019260051b82010192831161046257602001905b82821061090f5750505090565b8135815260209182019101610902565b9080601f8301121561046257813561093681610844565b926109446040519485610711565b81845260208085019260051b820101918383116104625760208201905b83821061097057505050505090565b81356001600160401b03811161046257602091610992878480948801016107a8565b815201910190610961565b6080600319820112610462576004356001600160401b03811161046257816109c79160040161085b565b916024356001600160401b03811161046257826109e6916004016108c2565b91604435906001600160401b03821161046257610a059160040161091f565b9060643590565b346104625760206104a0610a1f3661099d565b92919091611fd1565b90602080835192838152019201905f5b818110610a455750505090565b82516001600160a01b0316845260209384019390920191600101610a38565b90602080835192838152019201905f5b818110610a815750505090565b8251845260209384019390920191600101610a74565b9080602083519182815201916020808360051b8301019401925f915b838310610ac257505050505090565b9091929394602080610ae0600193601f198682030187528951610576565b97019301930191939290610ab3565b949392610b1b606093610b0d610b299460808a5260808a0190610a28565b9088820360208a0152610a64565b908682036040880152610a97565b930152565b346104625760203660031901126104625761060e610b4d600435612362565b9060409492945194859485610aef565b60206104a0610b6b3661099d565b92919091612426565b346104625760203660031901126104625760206104a0600435612587565b34610462576020366003190112610462576004355f5160206151ab5f395f51905f5254811015610c4657610c2e905f5160206151ab5f395f51905f525f527f417ab5363cd721cbd7a5446b963bb4274a7db26ef2bb28819834095c165ca17a0154610c3c610bff82612362565b9392959091610c20604051978897885260a0602089015260a0880190610a28565b908682036040880152610a64565b908482036060860152610a97565b9060808301520390f35b6123fe565b34610462575f3660031901126104625760206040517f3e83946653575f9a39005e1545185629e92736b7528ab20ca3816f315424a8118152f35b34610462575f36600319011261046257602065ffffffffffff5f51602061516b5f395f51905f525416604051908152f35b634e487b7160e01b5f52602160045260245ffd5b60081115610cd457565b610cb6565b6008811015610cd457602452565b3461046257602036600319011261046257610d036004356130fc565b6040516008821015610cd4576020918152f35b34610462576020366003190112610462576004355f525f51602061526b5f395f51905f5260205261002060405f20600381015490610d53816121ec565b90610d6c6002610d656001840161223d565b9201612285565b916125ad565b3461046257604036600319011261046257602060ff610dc7602435600435610d99826106ec565b5f525f51602061528b5f395f51905f528452600360405f20019060018060a01b03165f5260205260405f2090565b54166040519015158152f35b346104625760206104a0610de63661099d565b929190916125ad565b34610462575f3660031901126104625761060e610e0a612753565b604051918291602083526020830190610576565b604036600319011261046257600435610e36816106ec565b6024356001600160401b03811161046257610e559036906004016107a8565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115610f9a575b50610f8b575f546001600160a01b03163303610f4f576040516352d1902d60e01b8152916020836004816001600160a01b0386165afa5f9381610f1e575b50610eeb57634c9c8ce360e01b5f526001600160a01b03821660045260245b5ffd5b905f51602061524b5f395f51905f528303610f0a576100209250613da8565b632a87526960e21b5f52600483905260245ffd5b610f4191945060203d602011610f48575b610f398183610711565b810190612e32565b925f610ec9565b503d610f2f565b60405162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a6564207570677261646560601b6044820152606490fd5b63703e46dd60e11b5f5260045ffd5b5f51602061524b5f395f51905f52546001600160a01b0316141590505f610e8b565b34610462575f366003190112610462577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003610f8b5760206040515f51602061524b5f395f51905f528152f35b34610462576020366003190112610462576004355f525f51602061528b5f395f51905f52602052606060405f20805490600260018201549101549060405192835260208301526040820152f35b34610462575f3660031901126104625761060e610e0a612815565b6024359060ff8216820361046257565b346104625760403660031901126104625760206104a06004356110ac61107b565b604051916110ba8584610711565b5f8352339061320c565b9181601f84011215610462578235916001600160401b038311610462576020838186019501011161046257565b346104625760c03660031901126104625760043561110d61107b565b906044359061111b826106ec565b6064356001600160401b0381116104625761113a9036906004016110c4565b6084356001600160401b038111610462576111599036906004016107a8565b9160a435946001600160401b0386116104625761060e966111816111879736906004016107a8565b95612838565b6040519081529081906020820190565b34610462576080366003190112610462576004356111b361107b565b906044356001600160401b038111610462576111d39036906004016110c4565b9190926064356001600160401b0381116104625761120c946111fc6112049236906004016107a8565b943691610772565b913390613289565b604051908152602090f35b346104625760203660031901126104625760206104a060043561339a565b65ffffffffffff81160361046257565b346104625760203660031901126104625761002060043561126581611235565b61126d612ee4565b6134cd565b346104625760603660031901126104625760043561128e61107b565b90604435906001600160401b038211610462576020926112bf6112b86104a09436906004016110c4565b3691610772565b91339061320c565b34610462576080366003190112610462576004356001600160401b038111610462576112f790369060040161085b565b6024356001600160401b038111610462576113169036906004016108c2565b906044356001600160401b0381116104625761133690369060040161091f565b90606435916001600160401b0383116104625761060e9361135e6111879436906004016107a8565b9261295b565b3461046257602036600319011261046257600435611381816106ec565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b916113f3906113e56105ab97959693600f60f81b865260e0602087015260e0860190610576565b908482036040860152610576565b60608301949094526001600160a01b031660808201525f60a082015280830360c090910152610a64565b34610462575f366003190112610462577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005415806114d4575b15611497576114636135a9565b61146b613674565b9061060e60405161147d602082610711565b5f80825236602083013760405193849330914691866113be565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415611456565b346104625760803660031901126104625760043561151961107b565b9060443591611527836106ec565b6064356001600160401b038111610462576115f961154c6115fd9236906004016107a8565b6001600160a01b0386165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090208054600181019091556115f39060405160208101917ff2aad550cf55f045cb27e9c559f9889fdfb6e6cdaa032301d6ea397784ae51d7835288604083015260ff8816606083015260018060a01b038a16608083015260a082015260a081526115eb60c082610711565b519020613e47565b86613ed3565b1590565b61161857906111879161060e93611612611873565b9261320c565b6394ab6c0760e01b5f526001600160a01b03831660045260245ffd5b34610462575f36600319011261046257602061164e612a7a565b65ffffffffffff60405191168152f35b34610462575f36600319011261046257602060405160648152f35b3461046257606036600319011261046257600435611696816106ec565b6044356024356001600160401b038211610462576116ba60209236906004016107a8565b505f51602061520b5f395f51905f5254604051630748d63560e31b81526001600160a01b0394851660048201526024810192909252909283916044918391165afa801561173c5761060e915f9161171d575b506040519081529081906020820190565b611736915060203d602011610f4857610f398183610711565b5f61170c565b61270d565b34610462575f3660031901126104625760206001600160d01b0361176361373a565b16604051908152f35b3461046257602036600319011261046257600435611789816106ec565b611791612ee4565b5f5160206152cb5f395f51905f5254604080516001600160a01b03808416825290931660208401819052927f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b2264019190a16001600160a01b031916175f5160206152cb5f395f51905f5255005b346104625760206104a061180f3661099d565b92919091612de9565b3461046257602036600319011261046257602060405160018152f35b346104625760203660031901126104625760206104a06004355f525f51602061514b5f395f51905f5260205265ffffffffffff600160405f2001541690565b60405190611882602083610711565b5f8252565b34610462575f3660031901126104625761060e6040516118a8604082610711565b60058152640352e302e360dc1b6020820152604051918291602083526020830190610576565b34610462575f3660031901126104625760205f51602061522b5f395f51905f5254604051908152f35b346104625760a0366003190112610462576119136004356106ec565b61191e6024356106ec565b6044356001600160401b0381116104625761193d9036906004016108c2565b506064356001600160401b0381116104625761195d9036906004016108c2565b506084356001600160401b0381116104625761197d9036906004016107a8565b5061060e611989612b00565b6040516001600160e01b031990911681529081906020820190565b3461046257610100366003190112610462576004356001600160401b038111610462576119d59036906004016107a8565b602435906119e2826106ec565b6044356119ee816106ec565b60643560843560a4359060c4359260e43594611a09866106ec565b5f51602061530b5f395f51905f5254976001600160401b03611a3a60408b901c60ff16159a6001600160401b031690565b1680159081611b53575b6001149081611b49575b159081611b40575b50611b3157611a999789611a9060016001600160401b03195f51602061530b5f395f51905f525416175f51602061530b5f395f51905f5255565b611afc57612b2b565b611a9f57005b611ac960ff60401b195f51602061530b5f395f51905f5254165f51602061530b5f395f51905f5255565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2908060208101610542565b611b2c600160401b60ff60401b195f51602061530b5f395f51905f525416175f51602061530b5f395f51905f5255565b612b2b565b63f92ee8a960e01b5f5260045ffd5b9050155f611a56565b303b159150611a4e565b8a9150611a44565b346104625760203660031901126104625760206104a0600435612d5b565b606036600319011261046257600435611b91816106ec565b6024356044356001600160401b03811161046257610020925f92611bba849336906004016110c4565b9190611bc4612ee4565b826040519384928337810185815203925af1611bde612dba565b9061391e565b34610462575f366003190112610462575f5160206152cb5f395f51905f52546040516001600160a01b039091168152602090f35b34610462575f3660031901126104625760205f5160206151ab5f395f51905f5254604051908152f35b34610462575f3660031901126104625761060e604051611c62604082610711565b602081527f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e6020820152604051918291602083526020830190610576565b34610462575f366003190112610462575f546040516001600160a01b039091168152602090f35b34610462576020366003190112610462576004355f525f51602061526b5f395f51905f5260205261002060405f20600381015490611d04816121ec565b90611d166002610d656001840161223d565b91611fd1565b34610462575f3660031901126104625760206040517ff2aad550cf55f045cb27e9c559f9889fdfb6e6cdaa032301d6ea397784ae51d78152f35b346104625760203660031901126104625760043563ffffffff811681036104625761002090611d83612ee4565b61392b565b3461046257604036600319011261046257600435611da5816106ec565b60206024355f604051611db88482610711565b525f51602061520b5f395f51905f5254604051630748d63560e31b81526001600160a01b0394851660048201526024810192909252909283916044918391165afa801561173c5761060e915f9161171d57506040519081529081906020820190565b3461046257602036600319011261046257610020600435611e39612ee4565b6139c4565b346104625760a036600319011261046257611e5a6004356106ec565b611e656024356106ec565b6084356001600160401b03811161046257611e849036906004016107a8565b50611e8d612e17565b306001600160a01b03909116036108355760405163f23a6e6160e01b8152602090f35b346104625760203660031901126104625760206104a0600435612e41565b34610462575f366003190112610462575f51602061520b5f395f51905f52546040516001600160a01b039091168152602090f35b6020366003190112610462576004355f525f51602061526b5f395f51905f5260205261002060405f20600381015490611f3a816121ec565b90611f4c6002610d656001840161223d565b91612426565b90600182811c92168015611f80575b6020831014611f6c57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611f61565b5f527f0d5829787b8befdbc6044ef7457d8a95c2a04bc99235349f1a212c063e59d40160205260405f2090565b5f525f51602061514b5f395f51905f5260205260405f2090565b92909192611fe182858584612de9565b93611feb85612f97565b505f5160206152cb5f395f51905f5254612015906001600160a01b03165b6001600160a01b031690565b936040519363793d064960e11b8552602085600481895afa94851561173c575f956121cb575b503060601b6bffffffffffffffffffffffff191618946020604051809263b1c5f42760e01b825281806120748b89898c60048601613b66565b03915afa90811561173c575f916121ac575b5061209087611f8a565b555f5160206152cb5f395f51905f52546120b2906001600160a01b0316612009565b90813b15610462575f80946120de87604051998a97889687956308f2a0bb60e41b875260048701613b8f565b03925af190811561173c57612102926120fd92612192575b5042613bea565b614065565b65ffffffffffff8116156121835761217d8161215e7f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289293600161214487611fb7565b019065ffffffffffff1665ffffffffffff19825416179055565b6040805185815265ffffffffffff909216602083015290918291820190565b0390a190565b634844252360e11b5f5260045ffd5b806121a05f6121a693610711565b80610466565b5f6120f6565b6121c5915060203d602011610f4857610f398183610711565b5f612086565b6121e591955060203d602011610f4857610f398183610711565b935f61203b565b90604051918281549182825260208201905f5260205f20925f5b81811061221b57505061074692500383610711565b84546001600160a01b0316835260019485019487945060209093019201612206565b90604051918281549182825260208201905f5260205f20925f5b81811061226c57505061074692500383610711565b8454835260019485019487945060209093019201612257565b9081549161229283610844565b926122a06040519485610711565b80845260208401915f5260205f20915f905b8282106122bf5750505050565b6040515f85546122ce81611f52565b808452906001811690811561233f5750600114612308575b50600192826122fa85946020940382610711565b8152019401910190926122b2565b5f878152602081209092505b818310612329575050810160200160016122e6565b6001816020925483868801015201920191612314565b60ff191660208581019190915291151560051b84019091019150600190506122e6565b805f525f51602061526b5f395f51905f5260205260405f209160405190608082018281106001600160401b03821117610732576040526123a1846121ec565b82526123af6001850161223d565b916020810192835260036123c560028701612285565b95604083019687520154936060820194808652156123ec5750519151935192519193929190565b636ad0607560e01b5f5260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b8051821015610c465760209160051b010190565b9392909161243682828588612de9565b92602095612448602060101786613017565b5061246861245586611fb7565b805460ff60f01b1916600160f01b179055565b612470612e17565b306001600160a01b039091160361251c575b8461248f95969750613c07565b3061249b612009612e17565b1415806124ef575b6124da575b6040518181527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90806020810161217d565b5f5f5160206152ab5f395f51905f52556124a8565b506125176115f95f5160206152ab5f395f51905f52546001600160801b0381169060801c1490565b6124a3565b925f95929491955b8451811015612578576001903061254e612009612541848a612412565b516001600160a01b031690565b1461255a575b01612524565b6125736125678289612412565b518a8151910120613055565b612554565b50919550859490939192612482565b5f525f51602061514b5f395f51905f5260205265ffffffffffff60405f205460a01c1690565b939291906125bd83838388612de9565b946125c7866130fc565b6008811015610cd45715806126e2575b156126cb576125e7949550612de9565b6125f2603b82613017565b506126146125ff82611fb7565b80546001600160f81b0316600160f81b179055565b6040518181527f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c90602090a161264981611f8a565b5480612653575090565b5f5160206152cb5f395f51905f5254612674906001600160a01b0316612009565b803b156104625760405163c4d252f560e01b815260048101929092525f908290602490829084905af1801561173c576126b7575b505f6126b382611f8a565b5590565b806121a05f6126c593610711565b5f6126a8565b85638fe5d8a960e01b5f526004523360245260445ffd5b505f8681525f51602061514b5f395f51905f5260205260409020546001600160a01b031633146125d7565b6040513d5f823e3d90fd5b60405190612727604083610711565b601d82527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c740000006020830152565b5f51602061520b5f395f51905f5254604051634bf5d7e960e01b8152905f90829060049082906001600160a01b03165afa5f918161279a575b506105ab57506105ab612718565b9091503d805f833e6127ac8183610711565b810190602081830312610462578051906001600160401b038211610462570181601f82011215610462578051906127e282610757565b926127f06040519485610711565b8284526020838301011161046257815f9260208093018386015e83010152905f61278c565b60405190612824604083610711565b60058252640312e302e360dc1b6020830152565b9390929196956115f96129109161290a8a612854368789610772565b6001600160a01b0382165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590602081519101208b5160208d0120906040519260208401947f3e83946653575f9a39005e1545185629e92736b7528ab20ca3816f315424a81186528d604086015260ff8d16606086015260018060a01b0316608085015260a084015260c083015260e082015260e081526115eb61010082610711565b8a613ed3565b61292b576105ab959691612925913691610772565b92613289565b6394ab6c0760e01b5f526001600160a01b03871660045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b919392909361296a8233613541565b15612a67575f51602061522b5f395f51905f52549485612992575b6105ab9495503393614557565b5f1965ffffffffffff6129a3612a7a565b160165ffffffffffff8111612a625765ffffffffffff16955f6040516129ca602082610711565b525f51602061520b5f395f51905f5254604051630748d63560e31b81523360048201526024810198909852602090889060449082906001600160a01b03165afa96871561173c575f97612a41575b50808710612a265750612985565b636121770b60e11b5f5233600452602487905260445260645ffd5b612a5b91975060203d602011610f4857610f398183610711565b955f612a18565b612947565b63d9b3955760e01b5f523360045260245ffd5b5f51602061520b5f395f51905f52546040516324776b7d60e21b815290602090829060049082906001600160a01b03165afa5f9181612ac3575b506105ab57506105ab43614065565b9091506020813d602011612af8575b81612adf60209383610711565b810103126104625751612af181611235565b905f612ab4565b3d9150612ad2565b5f5160206152cb5f395f51905f5254306001600160a01b03909116036108355763bc197c8160e01b90565b97969593949194929092612b3d614770565b612b45612815565b612b4d614770565b89516001600160401b03811161073257612b7d81612b785f5160206151cb5f395f51905f5254611f52565b614259565b6020601f8211600114612c98579365ffffffffffff63ffffffff612c609895612c3e6107469e9f612be9612c4698612c659f9e9c9880612bd591612c5b9e5f91612c8d575b508160011b915f199060031b1c19161790565b5f5160206151cb5f395f51905f525561479b565b612c115f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10055565b612c395f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155565b6148ae565b169116613796565b612c4e614770565b612c56614770565b6137b2565b6137fc565b6138a3565b612c6d614770565b60018060a01b03166bffffffffffffffffffffffff60a01b5f5416175f55565b90508501515f612bc2565b5f5160206151cb5f395f51905f525f52601f198216907f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d915f5b818110612d435750612c609895612c3e6107469e9f612be9612c4698612c659f9e9c9880612c5b9d9965ffffffffffff9960019363ffffffff9a10612d2b575b5050811b015f5160206151cb5f395f51905f525561479b565b8601515f1960f88460031b161c191690555f80612d12565b8e830151845560019093019260209283019201612cd2565b805f525f51602061514b5f395f51905f5260205265ffffffffffff60405f205460a01c16905f525f51602061514b5f395f51905f5260205263ffffffff60405f205460d01c160165ffffffffffff8111612a625765ffffffffffff1690565b3d15612de4573d90612dcb82610757565b91612dd96040519384610711565b82523d5f602084013e565b606090565b9290612e03612e1192604051948593602085019788610aef565b03601f198101835282610711565b51902090565b5f5160206152cb5f395f51905f52546001600160a01b031690565b90816020910312610462575190565b5f51602061520b5f395f51905f5254604051632394e7a360e21b8152600481018390529190602090839060249082906001600160a01b03165afa90811561173c576105ab925f92612e9d575b50612e979061339a565b90613a33565b612e97919250612ebb9060203d602011610f4857610f398183610711565b9190612e8d565b5f5160206152cb5f395f51905f5254306001600160a01b039091160361083557565b612eec612e17565b336001600160a01b0390911603612f5857612f05612e17565b306001600160a01b0390911603612f1857565b612f2136610757565b612f2e6040519182610711565b3681526020810190365f83375f602036830101525190205b80612f4f613a9f565b03612f46575b50565b6347096e4760e01b5f523360045260245ffd5b6008811015610cd45760ff600191161b90565b600452606491906008811015610cd4576024525f604452565b612fa0816130fc565b906010612fac83612f6b565b1615612fb6575090565b6331b75e4d60e01b5f52600452612fcd9150610cd9565b601060445260645ffd5b612fe0816130fc565b906002612fec83612f6b565b1615612ff6575090565b6331b75e4d60e01b5f5260045261300d9150610cd9565b600260445260645ffd5b90613021826130fc565b918161302c84612f6b565b161561303757505090565b6331b75e4d60e01b5f5260045261304d82610cd9565b60445260645ffd5b5f5160206152ab5f395f51905f5254908160801c6001600160801b03806001830116931683146130d2575f527f7c712897014dbe49c045ef1299aa2d5f9e67e48eea4403efa21f1e0f3ac0cb0360205260405f20555f5160206152ab5f395f51905f52906001600160801b0382549181199060801b169116179055565b634e487b715f5260416020526024601cfd5b90816020910312610462575180151581036104625790565b61310581613c9d565b9061310f82610cca565b60058203613208576131219150611f8a565b545f5160206152cb5f395f51905f5254613143906001600160a01b0316612009565b604051632c258a9f60e11b815260048101839052602081602481855afa90811561173c575f916131e9575b501561317b575050600590565b604051632ab0f52960e01b81526004810192909252602090829060249082905afa90811561173c575f916131ba575b50156131b557600790565b600290565b6131dc915060203d6020116131e2575b6131d48183610711565b8101906130e4565b5f6131aa565b503d6131ca565b613202915060203d6020116131e2576131d48183610711565b5f61316e565b5090565b916105ab939160405193613221602086610711565b5f8552613289565b93909260ff613255936105ab97958752166020860152604085015260a0606085015260a0840190610576565b916080818403910152610576565b909260ff6080936105ab9695845216602083015260408201528160608201520190610576565b9291909261329681612fd7565b506132a081612587565b5f51602061520b5f395f51905f5254604051630748d63560e31b81526001600160a01b03808816600483018190526024830194909452929692909160209183916044918391165afa90811561173c576133039285915f93613379575b5084613f41565b948051155f1461334657506133407fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4938660405194859485613263565b0390a290565b613340907fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb8712948760405195869586613229565b61339391935060203d602011610f4857610f398183610711565b915f6132fc565b65ffffffffffff90806133b95f51602061518b5f395f51905f5261402a565b9491501611155f146133d357505b6001600160d01b031690565b6133dd9150614065565b5f51602061518b5f395f51905f5254905f82916005841161346d575b61341193505f51602061518b5f395f51905f52614d14565b8061341d57505f6133c7565b61346161342c6134689261371f565b5f51602061518b5f395f51905f525f527f293b0181c8ec34cd3252e741689bdc21b70ee7a0ec76216439035a5c3718909b0190565b5460301c90565b6133c7565b919261347881614bb6565b8103908111612a6257613411935f51602061518b5f395f51905f525f5265ffffffffffff8260205f2001541665ffffffffffff8516105f146134bb5750916133f9565b9291506134c790613bdc565b906133f9565b7fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93604065ffffffffffff805f51602061516b5f395f51905f5254169382519485521692836020820152a165ffffffffffff195f51602061516b5f395f51905f525416175f51602061516b5f395f51905f5255565b908051603481106135a15760131981830101516001600160b01b03191669dc8f8d908f908c9a8dc360b01b016135a157613580916029198201906140c0565b901591821561358e57505090565b6001600160a01b03918216911614919050565b505050600190565b6040515f5160206151cb5f395f51905f5254815f6135c683611f52565b808352926001811690811561365557506001146135ea575b6105ab92500382610711565b505f5160206151cb5f395f51905f525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b8183106136395750509060206105ab928201016135de565b6020919350806001915483858801015201910190918392613621565b602092506105ab94915060ff191682840152151560051b8201016135de565b6040515f5160206151eb5f395f51905f5254815f61369183611f52565b808352926001811690811561365557506001146136b4576105ab92500382610711565b505f5160206151eb5f395f51905f525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b8183106137035750509060206105ab928201016135de565b60209193508060019154838588010152019101909183926136eb565b5f19810191908211612a6257565b91908203918211612a6257565b5f51602061518b5f395f51905f52548061375357505f90565b805f19810111612a62575f51602061518b5f395f51905f525f527f293b0181c8ec34cd3252e741689bdc21b70ee7a0ec76216439035a5c3718909a015460301c90565b6107469291611d83611e39926137aa614770565b61126d614770565b6137ba614770565b6137c2614770565b60018060a01b03166bffffffffffffffffffffffff60a01b5f51602061520b5f395f51905f525416175f51602061520b5f395f51905f5255565b90613805614770565b61380d614770565b6064821161388b576001600160d01b0361382561373a565b169161382f612a7a565b926001600160d01b0382116105475791927f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b46339979290613877906001600160d01b03841690614a26565b5050604080519182526020820192909252a1565b5063243e544560e01b5f52600452606460245260445ffd5b6138ab614770565b6138b3614770565b5f5160206152cb5f395f51905f5254604080516001600160a01b03808416825290931660208401819052927f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b2264019190a16001600160a01b031916175f5160206152cb5f395f51905f5255565b90919061074657506149bb565b63ffffffff81169081156139b15769ffffffff000000000000907f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e882860405f51602061516b5f395f51905f52549481519063ffffffff8760301c1682526020820152a160301b169069ffffffff0000000000001916175f51602061516b5f395f51905f5255565b63f1cfbf0560e01b5f525f60045260245ffd5b5f51602061522b5f395f51905f525460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc0546191a15f51602061522b5f395f51905f5255565b8115613a1f570490565b634e487b7160e01b5f52601260045260245ffd5b5f19828209908281029182808210910303908115613a94578160641115613a8d577f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c29936064910990828211900360fe1b910360021c170290565b6011613bf7565b505060649004919050565b5f5160206152ab5f395f51905f5254906001600160801b0382169160801c8214613b5457815f527f7c712897014dbe49c045ef1299aa2d5f9e67e48eea4403efa21f1e0f3ac0cb0360205260405f2054916001600160801b0381165f527f7c712897014dbe49c045ef1299aa2d5f9e67e48eea4403efa21f1e0f3ac0cb036020525f60408120556001600160801b038060015f5160206152ab5f395f51905f52930116166001600160801b0319825416179055565b634e487b715f5260316020526024601cfd5b949392610b1b608093610b0d613b849460a08a5260a08a0190610a28565b935f60608201520152565b9192613bbe60a094613bb0613bcc949998979960c0875260c0870190610a28565b908582036020870152610a64565b908382036040850152610a97565b945f606083015260808201520152565b9060018201809211612a6257565b91908201809211612a6257565b634e487b715f526020526024601cfd5b5f5160206152cb5f395f51905f525490949192916001600160a01b03909116906bffffffffffffffffffffffff193060601b16823b1561046257613c655f956040519788968795869563e38335e560e01b8752189260048601613b66565b039134905af1801561173c57613c84575b50613c815f91611f8a565b55565b80613c905f8093610711565b800312610462575f613c76565b613ca681611fb7565b5460f881901c9060f01c60ff16613da157613d9b57613cc481612587565b8015613d8757613ce0613cd5612a7a565b65ffffffffffff1690565b80911015613d8157613cf182612d5b565b10613cfc5750600190565b613d086115f982614b1e565b8015613d52575b15613d1a5750600390565b613d44905f525f51602061514b5f395f51905f5260205265ffffffffffff600160405f2001541690565b613d4d57600490565b600590565b50613d7c6115f9825f525f51602061528b5f395f51905f5260205260405f20600181015490541090565b613d0f565b50505f90565b636ad0607560e01b5f52600482905260245ffd5b50600290565b5050600790565b90813b15613e26575f51602061524b5f395f51905f5280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115613e0e57612f5591614b5f565b505034613e1757565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b604290613e5261509b565b613e5a615105565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152613eab60c082610711565b519020906040519161190160f01b8352600283015260228201522090565b60041115610cd457565b9190823b613efb5790613ee591614b7c565b50613eef81613ec9565b15918261358e57505090565b916020926064835f94519060405193630b135d3f60e11b855260048501526040602485015286820190604485015e01915afa630b135d3f60e11b5f511460193d11161690565b613f62909291925f525f51602061528b5f395f51905f5260205260405f2090565b9160038301613f8b613f8483839060018060a01b03165f5260205260405f2090565b5460ff1690565b61400e57613faf60ff9392613fbc929060018060a01b03165f5260205260405f2090565b805460ff19166001179055565b1680613fd35750613fce828254613bea565b905590565b60018103613fea5750600101613fce828254613bea565b600203613fff57600201613fce828254613bea565b6303599be160e11b5f5260045ffd5b6371c6af4960e01b5f526001600160a01b03821660045260245ffd5b8054908161403c5750505f905f905f90565b815f19810111612a62575f525f199060205f2001015460019165ffffffffffff82169160301c90565b65ffffffffffff811161407d5765ffffffffffff1690565b6306dfcc6560e41b5f52603060045260245260445ffd5b908160011b9180830460021490151715612a6257565b908160041b9180830460101490151715612a6257565b9190825182118015614147575b614120576140da81613bdc565b821180614129575b6140ed901515614094565b60280180602811612a6257614102828461372d565b036141205761411092614d78565b90916001600160a01b0390911690565b5050505f905f90565b50602081840101516001600160f01b03191661060f60f31b146140e2565b508181116140cd565b5f5160206151ab5f395f51905f5254600160401b81101561073257600181015f5160206151ab5f395f51905f52555f5160206151ab5f395f51905f5254811015610c46575f5160206151ab5f395f51905f525f527f417ab5363cd721cbd7a5446b963bb4274a7db26ef2bb28819834095c165ca17a0155565b8181106141d4575050565b5f81556001016141c9565b918181106141ec57505050565b610746925f5260205f2091820191016141c9565b8151916001600160401b03831161073257600160401b83116107325760209061422e848454818655856141df565b01905f5260205f205f5b8381106142455750505050565b600190602084519401938184015501614238565b90601f8211614266575050565b610746915f5160206151cb5f395f51905f525f5260205f20906020601f840160051c8301931061429e575b601f0160051c01906141c9565b9091508190614291565b90601f82116142b5575050565b610746915f5160206152eb5f395f51905f525f5260205f20906020601f840160051c8301931061429e57601f0160051c01906141c9565b9190601f81116142fb57505050565b610746925f5260205f20906020601f840160051c8301931061429e57601f0160051c01906141c9565b91909182516001600160401b0381116107325761434b816143458454611f52565b846142ec565b6020601f821160011461438a57819061437b9394955f9261437f575b50508160011b915f199060031b1c19161790565b9055565b015190505f80614367565b601f1982169061439d845f5260205f2090565b915f5b8181106143d7575095836001959697106143bf575b505050811b019055565b01515f1960f88460031b161c191690555f80806143b5565b9192602060018192868b0151815501940192016143a0565b815191600160401b8311610732578154838355808410614449575b50602061441c9101915f5260205f2090565b5f915b83831061442c5750505050565b600160208261443d83945186614324565b0192019201919061441f565b825f528360205f2091820191015b818110614464575061440a565b8061447160019254611f52565b8061447e575b5001614457565b601f8111831461449357505f81555b5f614477565b6144b59083601f6144a7855f5260205f2090565b920160051c820191016141c9565b5f818152602081208183555561448d565b9080518051906001600160401b03821161073257600160401b8211610732576020906144f7838654818855876141df565b01835f5260205f205f5b83811061453a57505050506060816145226020600394015160018601614200565b6145336040820151600286016143ef565b0151910155565b82516001600160a01b031681830155602090920191600101614501565b91949394835161456f60208601918220838587612de9565b948451845190818114801590614765575b801561475d575b61474057505065ffffffffffff6145af6145a088611fb7565b5460a01c65ffffffffffff1690565b16614723577f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08697986105ab976146d684896146176145ec612a7a565b65ffffffffffff61461065ffffffffffff5f51602061516b5f395f51905f52541690565b9116613bea565b8961463663ffffffff5f51602061516b5f395f51905f525460301c1690565b6146b461464288611fb7565b80546001600160a01b0319166001600160a01b038b1617815561468b61466786614065565b825465ffffffffffff60a01b191660a09190911b65ffffffffffff60a01b16178255565b61469483615070565b815463ffffffff60d01b191660d09190911b63ffffffff60d01b16179055565b8c6146c96146c28651614e22565b9285613bea565b94604051998a998a614e6b565b0390a16146e287614150565b519020916146ee610737565b93845260208401526040830152606082015261471e835f525f51602061526b5f395f51905f5260205260405f2090565b6144c6565b610ee886614730816130fc565b6331b75e4d60e01b5f5290612f7e565b8451630447b05d60e41b5f5260049190915260245260445260645ffd5b508015614587565b508451811415614580565b60ff5f51602061530b5f395f51905f525460401c161561478c57565b631afcd79f60e31b5f5260045ffd5b9081516001600160401b038111610732576147da816147c75f5160206151eb5f395f51905f5254611f52565b5f5160206151eb5f395f51905f526142ec565b602092601f821160011461481a57614809929382915f9261437f5750508160011b915f199060031b1c19161790565b5f5160206151eb5f395f51905f5255565b5f5160206151eb5f395f51905f525f52601f198216937f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75915f5b868110614896575083600195961061487e575b505050811b015f5160206151eb5f395f51905f5255565b01515f1960f88460031b161c191690555f8080614867565b91926020600181928685015181550194019201614854565b906148b7614770565b81516001600160401b038111610732576148e7816148e25f5160206152eb5f395f51905f5254611f52565b6142a8565b602092601f821160011461492757614916929382915f9261437f5750508160011b915f199060031b1c19161790565b5f5160206152eb5f395f51905f5255565b5f5160206152eb5f395f51905f525f52601f198216937fda13dda7583a39a3cd73e8830529c760837228fa4683752c823b17e10548aad5915f5b8681106149a3575083600195961061498b575b505050811b015f5160206152eb5f395f51905f5255565b01515f1960f88460031b161c191690555f8080614974565b91926020600181928685015181550194019201614961565b8051156149ca57602081519101fd5b63d6bda27560e01b5f5260045ffd5b805490600160401b8210156107325760018201808255821015610c46575f9081526020908190208351939091015160301b65ffffffffffff191665ffffffffffff90931692909217910155565b5f51602061518b5f395f51905f52549192918015614af55761342c614a4a9161371f565b908154614a66614a5f8265ffffffffffff1690565b9160301c90565b9265ffffffffffff808416921691808311614ae657869203614aa457614aa092509065ffffffffffff82549181199060301b169116179055565b9190565b5050614aa090614ac3614ab5610748565b65ffffffffffff9092168252565b6001600160d01b03851660208201525b5f51602061518b5f395f51905f526149d9565b632520601d60e01b5f5260045ffd5b50614b1990614b05614ab5610748565b6001600160d01b0384166020820152614ad3565b5f9190565b805f525f51602061528b5f395f51905f52602052614b47614b4260405f2092612587565b612e41565b600260018301549201548201809211612a6257111590565b5f806105ab93602081519101845af4614b76612dba565b91614f37565b8151919060418303614bac57614ba59250602082015190606060408401519301515f1a90614f7c565b9192909190565b50505f9160029190565b60018111156105ab57806001600160801b821015614cd7575b614c7d614c73614c69614c5f614c55614c4b614c3a614c849760048a600160401b614c899c1015614cca575b640100000000811015614cbd575b62010000811015614cb0575b610100811015614ca3575b6010811015614c96575b1015614c8e575b60030260011c90565b614c44818b613a15565b0160011c90565b614c44818a613a15565b614c448189613a15565b614c448188613a15565b614c448187613a15565b614c448186613a15565b8093613a15565b821190565b900390565b60011b614c31565b60041c9160021b91614c2a565b60081c9160041b91614c20565b60101c9160081b91614c15565b60201c9160101b91614c09565b60401c9160201b91614bfb565b5050614c89614c84614c7d614c73614c69614c5f614c55614c4b614c3a614cfe8a60801c90565b9850600160401b9750614bcf9650505050505050565b91905b838210614d245750505090565b9091928083169080841860011c8201809211612a6257845f5265ffffffffffff8260205f2001541665ffffffffffff8416105f14614d665750925b9190614d17565b939250614d7290613bdc565b91614d5f565b929092614d8484613bdc565b831180614e04575b614d9e614da591949293941515614094565b5f95613bea565b915b818310614db75750505060019190565b9092919360ff614dd8614dd36020888601015160ff60f81b1690565b614ffe565b1690600f8211614df95790614dee6001926140aa565b019401919290614da7565b505f94508493505050565b50602084820101516001600160f01b03191661060f60f31b14614d8c565b90614e2c82610844565b614e396040519182610711565b8281528092614e4a601f1991610844565b01905f5b828110614e5a57505050565b806060602080938501015201614e4e565b959998969794939192614eac93614e9e92885260018060a01b031660208801526101206040880152610120870190610a28565b908582036060870152610a64565b968388036080850152815180895260208901906020808260051b8c01019401915f905b828210614f0b57505050506105ab96975090614ef29184820360a0860152610a97565b9360c083015260e0820152610100818403910152610576565b90919294602080614f296001938f601f199082030186528951610576565b970192019201909291614ecf565b90614f4257506149bb565b81511580614f73575b614f53575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15614f4b565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411614ff3579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561173c575f516001600160a01b03811615614fe957905f905f90565b505f906001905f90565b5050505f9160039190565b60f81c602f811180615066575b1561501a57602f190160ff1690565b606081118061505c575b15615033576056190160ff1690565b6040811180615052575b1561504c576036190160ff1690565b5060ff90565b506047811061503d565b5060678110615024565b50603a811061500b565b63ffffffff81116150845763ffffffff1690565b6306dfcc6560e41b5f52602060045260245260445ffd5b6150a36135a9565b80519081156150b3576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156150e05790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b61510d613674565b805190811561511d576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156150e0579056fe7c712897014dbe49c045ef1299aa2d5f9e67e48eea4403efa21f1e0f3ac0cb0100d7616c8fe29c6c2fbe1d0c5bc8f2faa4c35b43746e70b24b4d532752affd01e770710421fd2cad75ad828c61aa98f2d77d423a440b67872d0f65554148e0007fd223d3380145bd26132714391e777c488a0df7ac2dd4b66419d8549fb3a600a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1033ba4977254e415696610a40ebf2258dbfa0ec6a2ff64e84bfe715ff16977cc0000d7616c8fe29c6c2fbe1d0c5bc8f2faa4c35b43746e70b24b4d532752affd00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc7fd223d3380145bd26132714391e777c488a0df7ac2dd4b66419d8549fb3a601a1cefa0f43667ef127a258e673c94202a79b656e62899531c4376d87a7f398007c712897014dbe49c045ef1299aa2d5f9e67e48eea4403efa21f1e0f3ac0cb020d5829787b8befdbc6044ef7457d8a95c2a04bc99235349f1a212c063e59d4007c712897014dbe49c045ef1299aa2d5f9e67e48eea4403efa21f1e0f3ac0cb00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220a8a437d137f9beed46b6d942c3f479c99d3c7bb9282968296f130bffbed13a0f64736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00