0 txs
0 calls
constructor
constructor(uint256 _mintFeeAmount, address _mintFeeRecipient, address _factory, address _protocolRewards)
functions
assumeLastTokenIdMatches
viewfunction assumeLastTokenIdMatches(uint256 lastTokenId) view
balanceOf
viewfunction balanceOf(address account, uint256 id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])
computeTotalReward
purefunction computeTotalReward(uint256 mintPrice, uint256 quantity) pure returns (uint256)
config
viewfunction config() view returns (address owner, uint96 __gap1, address fundsRecipient, uint96 __gap2, address transferHook, uint96 __gap3)
CONTRACT_BASE_ID
viewfunction CONTRACT_BASE_ID() view returns (uint256)
contractURI
viewfunction contractURI() view returns (string)
contractVersion
purefunction contractVersion() pure returns (string)
createReferrals
viewfunction createReferrals(uint256) view returns (address)
customRenderers
viewfunction customRenderers(uint256) view returns (address)
firstMinters
viewfunction firstMinters(uint256) view returns (address)
getCreatorRewardRecipient
viewfunction getCreatorRewardRecipient(uint256 tokenId) view returns (address)
getCustomRenderer
viewfunction getCustomRenderer(uint256 tokenId) view returns (address customRenderer)
getPermissions
viewfunction getPermissions(uint256 tokenId, address user) view returns (uint256)
getRoyalties
viewfunction getRoyalties(uint256 tokenId) view returns (tuple)
getTokenInfo
viewfunction getTokenInfo(uint256 tokenId) view returns (tuple)
implementation
viewfunction implementation() view returns (address)
isAdminOrRole
viewfunction isAdminOrRole(address user, uint256 tokenId, uint256 role) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address account, address operator) view returns (bool)
metadataRendererContract
viewfunction metadataRendererContract(uint256) view returns (address)
MINT_FEE
viewfunction MINT_FEE() view returns (uint256)
mintFee
viewfunction mintFee() view returns (uint256)
name
viewfunction name() view returns (string)
nextTokenId
viewfunction nextTokenId() view returns (uint256)
owner
viewfunction owner() view returns (address)
PERMISSION_BIT_ADMIN
viewfunction PERMISSION_BIT_ADMIN() view returns (uint256)
PERMISSION_BIT_FUNDS_MANAGER
viewfunction PERMISSION_BIT_FUNDS_MANAGER() view returns (uint256)
PERMISSION_BIT_METADATA
viewfunction PERMISSION_BIT_METADATA() view returns (uint256)
PERMISSION_BIT_MINTER
viewfunction PERMISSION_BIT_MINTER() view returns (uint256)
PERMISSION_BIT_SALES
viewfunction PERMISSION_BIT_SALES() view returns (uint256)
permissions
viewfunction permissions(uint256, address) view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
royalties
viewfunction royalties(uint256) view returns (uint32 royaltyMintSchedule, uint32 royaltyBPS, address royaltyRecipient)
royaltyInfo
viewfunction royaltyInfo(uint256 tokenId, uint256 salePrice) view returns (address receiver, uint256 royaltyAmount)
supplyRoyaltyInfo
viewfunction supplyRoyaltyInfo(uint256 tokenId, uint256 totalSupply, uint256 mintAmount) view returns (address receiver, uint256 royaltyAmount)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
purefunction symbol() pure returns (string)
uri
viewfunction uri(uint256 tokenId) view returns (string)
addPermission
nonpayablefunction addPermission(uint256 tokenId, address user, uint256 permissionBits)
adminMint
nonpayablefunction adminMint(address recipient, uint256 tokenId, uint256 quantity, bytes data)
adminMintBatch
nonpayablefunction adminMintBatch(address recipient, uint256[] tokenIds, uint256[] quantities, bytes data)
burnBatch
nonpayablefunction burnBatch(address from, uint256[] tokenIds, uint256[] amounts)
callRenderer
nonpayablefunction callRenderer(uint256 tokenId, bytes data)
callSale
nonpayablefunction callSale(uint256 tokenId, address salesConfig, bytes data)
initialize
nonpayablefunction initialize(string contractName, string newContractURI, tuple defaultRoyaltyConfiguration, address defaultAdmin, bytes[] setupActions)
mint
payablefunction mint(address minter, uint256 tokenId, uint256 quantity, bytes minterArguments) payable
mintWithRewards
payablefunction mintWithRewards(address minter, uint256 tokenId, uint256 quantity, address[] rewardsRecipients, bytes minterArguments) payable
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
reduceSupply
nonpayablefunction reduceSupply(uint256 _newSupply, uint256 tokenId)
removePermission
nonpayablefunction removePermission(uint256 tokenId, address user, uint256 permissionBits)
safeBatchTransferFrom
nonpayablefunction safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] amounts, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes data)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setFundsRecipient
nonpayablefunction setFundsRecipient(address fundsRecipient)
setOwner
nonpayablefunction setOwner(address newOwner)
setSoulbound
nonpayablefunction setSoulbound(bool _isSoulbound, uint256 tokenId)
setTokenMetadataRenderer
nonpayablefunction setTokenMetadataRenderer(uint256 tokenId, address renderer)
setTransferHook
nonpayablefunction setTransferHook(address transferHook)
setupNewToken
nonpayablefunction setupNewToken(string newURI, uint256 maxSupply, bool isSoulbound) returns (uint256)
setupNewTokenWithCreateReferral
nonpayablefunction setupNewTokenWithCreateReferral(string newURI, uint256 maxSupply, address createReferral, bool isSoulbound) returns (uint256)
updateContractMetadata
nonpayablefunction updateContractMetadata(string _newURI, string _newName)
updateCreateReferral
nonpayablefunction updateCreateReferral(uint256 tokenId, address recipient)
updateRoyaltiesForToken
nonpayablefunction updateRoyaltiesForToken(uint256 tokenId, tuple newConfiguration)
updateTokenURI
nonpayablefunction updateTokenURI(uint256 tokenId, string _newURI)
upgradeTo
nonpayablefunction upgradeTo(address newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw()
events
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
AdminMinted
event AdminMinted(address indexed sender, address indexed recipient, uint256 indexed tokenId, uint256 quantity)
AdminMintedBatch
event AdminMintedBatch(address indexed sender, address indexed minter, uint256[] tokenIds, uint256[] quantities)
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed operator, bool approved)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
CollectionSizeReduced
event CollectionSizeReduced(address indexed updater, uint256 indexed tokenId, uint256 indexed newSize)
ConfigUpdated
event ConfigUpdated(address indexed updater, uint8 indexed updateType, (address owner, uint96 __gap1, address fundsRecipient, uint96 __gap2, address transferHook, uint96 __gap3) newConfig)
ContractMetadataUpdated
event ContractMetadataUpdated(address indexed updater, string uri, string name)
ContractRendererUpdated
event ContractRendererUpdated(address renderer)
Initialized
event Initialized(uint8 version)
OwnershipTransferred
event OwnershipTransferred(address lastOwner, address newOwner)
Purchased
event Purchased(address indexed sender, address indexed minter, uint256 indexed tokenId, uint256 quantity, uint256 value)
RendererUpdated
event RendererUpdated(uint256 indexed tokenId, address indexed renderer, address indexed user)
SetupNewToken
event SetupNewToken(uint256 indexed tokenId, address indexed sender, string newURI, uint256 maxSupply)
SetupSoulbound
event SetupSoulbound(uint256 indexed tokenId, bool isSoulbound)
TransferBatch
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)
TransferSingle
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)
UpdatedPermissions
event UpdatedPermissions(uint256 indexed tokenId, address indexed user, uint256 indexed permissions)
UpdatedRoyalties
event UpdatedRoyalties(uint256 indexed tokenId, address indexed user, (uint32 royaltyMintSchedule, uint32 royaltyBPS, address royaltyRecipient) configuration)
UpdatedToken
event UpdatedToken(address indexed from, uint256 indexed tokenId, (string uri, uint256 maxSupply, uint256 totalMinted, bool isSoulbound) tokenData)
Upgraded
event Upgraded(address indexed implementation)
URI
event URI(string value, uint256 indexed id)
errors
Burn_NotOwnerOrApproved
error Burn_NotOwnerOrApproved(address operator, address user)
Call_TokenIdMismatch
error Call_TokenIdMismatch()
CallFailed
error CallFailed(bytes reason)
CannotMintMoreTokens
error CannotMintMoreTokens(uint256 tokenId, uint256 quantity, uint256 totalMinted, uint256 maxSupply)
Config_TransferHookNotSupported
error Config_TransferHookNotSupported(address proposedAddress)
CREATOR_FUNDS_RECIPIENT_NOT_SET
error CREATOR_FUNDS_RECIPIENT_NOT_SET()
ETHWithdrawFailed
error ETHWithdrawFailed(address recipient, uint256 amount)
FundsWithdrawInsolvent
error FundsWithdrawInsolvent(uint256 amount, uint256 contractValue)
INVALID_ADDRESS_ZERO
error INVALID_ADDRESS_ZERO()
INVALID_ETH_AMOUNT
error INVALID_ETH_AMOUNT()
InvalidCollectionSize
error InvalidCollectionSize()
InvalidMintSchedule
error InvalidMintSchedule()
Mint_InsolventSaleTransfer
error Mint_InsolventSaleTransfer()
Mint_TokenIDMintNotAllowed
error Mint_TokenIDMintNotAllowed()
Mint_UnknownCommand
error Mint_UnknownCommand()
Mint_ValueTransferFail
error Mint_ValueTransferFail()
NewOwnerNeedsToBeAdmin
error NewOwnerNeedsToBeAdmin()
NoRendererForToken
error NoRendererForToken(uint256 tokenId)
ONLY_CREATE_REFERRAL
error ONLY_CREATE_REFERRAL()
Renderer_NotValidRendererContract
error Renderer_NotValidRendererContract()
RendererNotValid
error RendererNotValid(address renderer)
Sale_CannotCallNonSalesContract
error Sale_CannotCallNonSalesContract(address targetContract)
TokenIdMismatch
error TokenIdMismatch(uint256 expected, uint256 actual)
Transfer_NotAllowed
error Transfer_NotAllowed()
UserMissingRoleForToken
error UserMissingRoleForToken(address user, uint256 tokenId, uint256 role)
creation bytecode
0x6101403461023757601f615d8c38819003918201601f1916830191906001600160401b0383118484101761023b578160809285926040958652833981010312610237578151906100516020840161024f565b610068606061006184870161024f565b950161024f565b3060805261271060a0526001600160a01b03919082168015801561022d575b61021c5760e05260c0525f549060ff8260081c16159182809361020f575b80156101f8575b1561019d5760ff1981166001175f558261018b575b5061012093845261010094168452610153575b5190615b2892836102648439608051838181612597015281816126860152612b23015260a05183613028015260c05183818161486f01528181614d5f01528181614d8701528181614db00152614dd7015260e0518381816147ea01526148ad0152518281816127090152612bb10152518181816135a401526146400152f35b61ff00195f54165f557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986020825160018152a16100d4565b61ffff1916610101175f9081556100c1565b835162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156100ac5750600160ff8216146100ac565b50600160ff8216106100a5565b8351632d87658960e01b8152600490fd5b5082821615610087565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036102375756fe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c8062fdd58e1461351657806301144201146134fc57806301ffc9a71461345c57806306fdde031461337a5780630e89341c1461335b57806310a7eb5d1461333157806313966db514610b2f57806313af4035146132c857806317bd48bb1461325a57806318711c7d1461323f57806318e97fd1146130ba57806323bd03861461306c5780632a55205a14612ff75780632eb2c2d614612d46578063300ecdb914612a555780633659cfe614612afe5780633ccfd60b14612a9a5780634913162d14612a555780634e1273f41461290c5780634f1ef2861461264757806352d1902d146125855780635c60da1b146125515780635d0f6cba146124105780635e4e0404146123f25780636661a9ba1461229257806369a5b3021461225f5780636b20c45414611f16578063731133e914611eb957806375794a3c14611e9b57806379502c5514611e425780637dafae4d14611e0f5780637f2dc61c14611d3a5780637f77f57414611ceb57806384ac319114611c5d5780638621ea4b14611c1e5780638a08eb4c146116af5780638c7a63ae146116265780638da5cb5b146115fd5780638ec998a0146115a1578063929a71281461158757806395d89b41146115485780639993eae1146114d25780639c5c63c91461143f5780639ebb83241461140c578063a0a8e460146113c7578063a22cb465146112de578063a453eaf0146112c3578063a457c673146112a2578063ac9650d81461120a578063af80248014611184578063afed7e9e14610fc6578063bb3bafd614610f6f578063bf2435b914610ef3578063c046435614610ed8578063c238d1ee14610e3c578063d1ad846b14610b34578063d7bf81a314610b2f578063d904b94a14610974578063da4624311461090b578063dd15e05f146108d8578063e72878b414610896578063e74d86c214610866578063e8a3d48514610833578063e985e9c5146107e1578063ef71c82e14610582578063f1b0d6bb146105675763f242432a0361000e57346105635760a03660031901126105635761031761353d565b61031f613553565b906064356044356084356001600160401b038111610563576103459036906004016136b8565b6001600160a01b038481169490610393908390338814801561053e575b61036b90613b87565b881692610379841515614511565b6103828661596a565b8961038c8961596a565b9233615424565b825f526020956097875260405f20865f5287528460405f20546103b88282101561456b565b855f526097895260405f20885f5289520360405f2055835f526097875260405f20825f52875260405f206103ed868254613d91565b90558186604051868152878a8201527fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6260403392a43b61042957005b61046c935f87946040519687958694859363f23a6e6160e01b9b8c865233600487015260248601526044850152606484015260a0608484015260a4830190613569565b03925af15f918161050f575b506104e35782610486615580565b6308c379a0146104ae575b60405162461bcd60e51b8152806104aa60048201615608565b0390fd5b6104b661559b565b90816104c25750610491565b6104aa60405192839262461bcd60e51b845260048401526024830190613569565b6001600160e01b0319160390506104f657005b60405162461bcd60e51b8152806104aa60048201615537565b610530919250843d8611610537575b6105288183613646565b810190615517565b905f610478565b503d61051e565b50875f52609860205260405f20335f5260205261036b60ff60405f2054169050610362565b5f80fd5b34610563575f36600319011261056357602060405160048152f35b34610563576040366003190112610563576001600160401b03600435818111610563576105b39036906004016136b8565b602435828111610563576105cb9036906004016136b8565b335f9081525f80516020615ad3833981519152602090815260409091205491939091601216158015906101fe906107c1575b501561079c575f80526101c6825260405f20908351908111610788576106238254613940565b601f8111610745575b5082601f82116001146106bc57927f74b7c2afa3f89c562b59674a101e2c48bceeb27cdb620afefa14446f1ffa487b9492826106ac9361069d965f916106b1575b508160011b915f199060031b1c19161790555b61068986615148565b604051938493604085526040850190613569565b90838203908401523395613569565b0390a2005b90508501518961066d565b601f19821690835f52845f20915f5b81811061072e57508361069d96937f74b7c2afa3f89c562b59674a101e2c48bceeb27cdb620afefa14446f1ffa487b9896936106ac9660019410610716575b5050811b019055610680565b8701515f1960f88460031b161c19169055898061070a565b91928660018192868b0151815501940192016106cb565b825f52835f20601f830160051c81019185841061077e575b601f0160051c01905b818110610773575061062c565b5f8155600101610766565b909150819061075d565b634e487b7160e01b5f52604160045260245ffd5b604051634baa2a4d60e01b81523360048201525f602482015260106044820152606490fd5b90505f8052825260405f20335f528252601260405f2054161515856105fd565b34610563576040366003190112610563576107fa61353d565b610802613553565b9060018060a01b038091165f52609860205260405f2091165f52602052602060ff60405f2054166040519015158152f35b34610563575f3660031901126105635761086261084e614078565b604051918291602083526020830190613569565b0390f35b34610563576020366003190112610563576020610884600435613fd9565b6040516001600160a01b039091168152f35b34610563576020366003190112610563576004355f196101c85401908082036108bb57005b60449160405191634fa09b3f60e01b835260048301526024820152fd5b34610563576020366003190112610563576004355f5261012d602052602060018060a01b0360405f205416604051908152f35b34610563576040366003190112610563576004358015158082036105635760205f80516020615a538339815191529161096b6024359461094b8633614279565b855f526101c68452600360405f20019060ff801983541691151516179055565b604051908152a2005b3461056357606036600319011261056357600435610990613553565b906044356001600160401b038111610563576109b0903690600401613857565b91805f526101fe9360209480865260405f20335f528652600a60405f2054161590811591610b0f575b5015610ae9576001600160a01b0316906109f381836142fb565b6040516301ffc9a760e01b8152636890e5b360e01b60048201528581602481865afa908115610ade575f91610ab1575b5015610a98578360241161056357600483013503610a8657825f80949381946040519384928337810182815203925af190610a5c613e0e565b9115610a6457005b6104aa60405192839263a5fa8d2b60e01b845260048401526024830190613569565b60405163fe486c2b60e01b8152600490fd5b6040516370adc70360e11b815260048101839052602490fd5b610ad19150863d8811610ad7575b610ac98183613646565b810190613d15565b86610a23565b503d610abf565b6040513d5f823e3d90fd5b604051634baa2a4d60e01b81523360048201526024810183905260086044820152606490fd5b90505f8052855260405f20335f528552600a60405f2054161515866109d9565b61358d565b346105635760031960803682011261056357610b4e61353d565b6001600160401b039160243583811161056357610b6f903690600401613751565b9060443584811161056357610b88903690600401613751565b9360643590811161056357610ba19036906004016136b8565b92610baa6145ca565b335f9081525f80516020615ad38339815191526020908152604082205460061615969093915b8551811015610c015760019088610be8575b01610bd0565b610bfc610bf58289613ccd565b51336142fb565b610be2565b509084918683515f5b818110610de35750506001600160a01b03851692610c29841515615914565b610c3685518451146144b4565b610c438284878933615314565b5f5b8551811015610c8d5780610c5b60019286613ccd565b51610c668289613ccd565b515f5260978a5260405f20875f528a52610c8560405f20918254613d91565b905501610c45565b5090919294855f6040517f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb339180610cc68a8c83613fb4565b0390a43b610d0e575b5050610d047fc0d6da87a629809c1b871e1d2d54452fae1988bf4e85d2c82f51246281b6173c91604051918291339583613fb4565b0390a36001606555005b85610d68916040518093819263bc197c8160e01b968784523360048501525f602485015260a06044850152610d59610d4960a486018c6137ca565b838682030160648701528a6137ca565b91848303016084850152613569565b03815f895af15f9181610dc4575b50610d845785610486615580565b90919293945063ffffffff60e01b16036104f657829190610d047fc0d6da87a629809c1b871e1d2d54452fae1988bf4e85d2c82f51246281b6173c610ccf565b610ddc919250873d8911610537576105288183613646565b9087610d76565b80610e05610df360019389613ccd565b51610dfe8388613ccd565b51906158bb565b610e0f8186613ccd565b51610e1a8289613ccd565b515f526101c68a52610e34600260405f2001918254613d91565b905501610c0a565b3461056357608036600319011261056357610e5561353d565b60243590604435906064356001600160401b03811161056357610e7f610e999136906004016136b8565b610e876145ca565b610e9185336142fb565b8385846156ec565b6040519182526001600160a01b03169033907f78dab3a57c593d7cff5047cf6f6eedd10503cf2958b842f3eb39b363d457a4db90602090a46001606555005b34610563575f36600319011261056357602060405160028152f35b60a036600319011261056357610f0761353d565b6001600160401b039060643582811161056357610f28903690600401613827565b909160843593841161056357610f5a610f48610f68953690600401613857565b949093610f536145ca565b369161376c565b906044359060243590614620565b6001606555005b3461056357602036600319011261056357610862610f8e600435613f19565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160a01b0316908201529081906060820190565b346105635760803660031901126105635760043560603660231901126105635760405190610ff3826135e2565b63ffffffff60243581811681036105635783526044358181168103610563576020848101918252606435906001600160a01b0380831683036105635760408701928352855f526101fe80835260405f20335f528352602260405f2054161590811591611164575b50156111405784875116611138575b825116158061112c575b61111a57845f52610160815267ffffffff0000000060405f20948751169185549451901b1691600160401b600160e01b03905160401b169263ffffffff60e01b1617171790557f5837d55897cfc337f160a71d7b63a047abd50a3a8834f1c5d70f338846358c6d604051806111153395829190916040606082019363ffffffff80825116845260208201511660208401528160018060a01b0391015116910152565b0390a3005b604051630d9b92f160e01b8152600490fd5b50838351161515611073565b5f8752611069565b6064868360405191634baa2a4d60e01b835233600484015260248301526044820152fd5b90505f8052825260405f20335f528252602260405f20541615158861105a565b3461056357611192366136d6565b61119c8133614279565b805f526101c660205260405f20600181019081548410908115916111fc575b506111ea57829055337fbc29fb50a9cb6d70d45a0dc70173ceff8053fa55aef477fe57b1a7807d4e69ae5f80a4005b604051638802c51560e01b8152600490fd5b6002915001548310846111bb565b3461056357602080600319360112610563576004356001600160401b0381116105635761123e611244913690600401613827565b90613e3d565b6040519082820192808352815180945260408301938160408260051b8601019301915f955b8287106112765785850386f35b909192938280611292600193603f198a82030186528851613569565b9601920196019592919092611269565b346105635760206112bb6112b5366136d6565b90613b42565b604051908152f35b34610563575f36600319011261056357602060405160108152f35b34610563576040366003190112610563576112f761353d565b6024359081151590818303610563576001600160a01b0316913383146113705761134290335f52609860205260405f20845f5260205260405f209060ff801983541691151516179055565b6040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608490fd5b34610563575f366003190112610563576108626040516113e681613610565b6005815264322e312e3360d81b6020820152604051918291602083526020830190613569565b34610563576020366003190112610563576004355f52610232602052602060018060a01b0360405f205416604051908152f35b34610563576040366003190112610563576004356024356001600160401b038111610563575f91611475839236906004016136b8565b906114808133614174565b6001600160a01b039061149290613fd9565b1682602083519301915af16114a5613e0e565b90156114ad57005b60405163a5fa8d2b60e01b8152602060048201529081906104aa906024830190613569565b34610563576060366003190112610563576004356001600160401b03811161056357611502903690600401613857565b60443580151581036105635760209261153b9261151e336141f6565b6115266145ca565b6115363392602435923691613682565b614dfd565b6001606555604051908152f35b34610563575f36600319011261056357604051602081526040816060518060208301528060808484015e5f828201840152601f01601f19168101030190f35b34610563575f366003190112610563576020604051818152f35b34610563576115af366137fd565b916115ba8133614279565b5f8181526101fe602090815260408083206001600160a01b0395909516808452949091528120805494909417938490555f80516020615a938339815191529080a4005b34610563575f366003190112610563576101c9546040516001600160a01b039091168152602090f35b34610563576020366003190112610563575f6060604051611646816135c7565b81815282602082015282604082015201526004355f526101c660205261086260405f2060ff60036040519261167a846135c7565b61168381613978565b845260018101546020850152600281015460408501520154161515606082015260405191829182613884565b346105635760e0366003190112610563576004356001600160401b038111610563576116df9036906004016136b8565b6024356001600160401b038111610563576116fe9036906004016136b8565b90606036604319011261056357604051611717816135e2565b60443563ffffffff8116810361056357815260643563ffffffff811681036105635760208201526084356001600160a01b038116810361056357604082015260a4356001600160a01b03811690036105635760c4356001600160401b03811161056357611788903690600401613827565b9190926117936145ca565b5f549460ff8660081c161595868097611c11575b8015611bfa575b15611b9e5760ff1981166001175f5586611b8d575b506117e660ff5f5460081c166117d8816150e8565b6117e1816150e8565b6150e8565b60016065556117ff60a4356001600160a01b031661528b565b6101c89081549160018301905560405190611819826135c7565b81525f60208201525f60408201525f6060820152815f526101c660205260405f209080519182516001600160401b03811161078857849361185a8354613940565b601f8111611b3a575b50602090601f8311600114611acd576118c49392915f9183611ac2575b50508160011b915f199060031b1c19161781555b602083015160018201556040830151600282015560036060840151151591019060ff801983541691151516179055565b7f323bc81dbd896aad1241aab7ac995a86244a273b7b4ac5263224b966cfd12835604051806118f4339482613884565b0390a35f80516020615a5383398151915260206040515f8152a263ffffffff825116611aba575b60408201516001600160a01b03161580611aa7575b61111a57611a0a915f805261016060205260405f2063ffffffff82511681549067ffffffff00000000602085015160201b1690600160401b600160e01b03604086015160401b169263ffffffff60e01b1617171790555f7f5837d55897cfc337f160a71d7b63a047abd50a3a8834f1c5d70f338846358c6d604051806119e33395829190916040606082019363ffffffff80825116845260208201511660208401528160018060a01b0391015116910152565b0390a36119fa60a4356001600160a01b0316614441565b611a0560a43561437d565b615148565b80611a56575b5050611a1d576001606555005b61ff00195f54165f557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a1610f68565b611a6891611a633361528b565b613e3d565b50335f8181525f80516020615ad3833981519152602052604081208054600219169081905591905f80516020615a938339815191528180a48180611a10565b5063ffffffff6020830151161515611930565b5f825261191b565b015190508c80611880565b90835f5260205f20915f5b601f1985168110611b1f57509183916001936118c49695601f19811610611b07575b505050811b018155611894565b01515f1960f88460031b161c191690558c8080611afa565b81830151845588975060019093019260209283019201611ad8565b909192809495505f5260205f20601f840160051c810160208510611b86575b90879695949392915b601f830160051c82018110611b78575050611863565b5f8155889750600101611b62565b5080611b59565b61ffff1916610101175f55866117c3565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156117ae5750600160ff8216146117ae565b50600160ff8216106117a7565b3461056357606036600319011261056357611c40604435602435600435613d9e565b604080516001600160a01b03939093168352602083019190915290f35b34610563576080366003190112610563576004356001600160401b03811161056357611c8d903690600401613857565b6044356001600160a01b038116919082900361056357606435801515810361056357602093611cbf9261151e336141f6565b90815f52610231835260405f20906001600160601b0360a01b8254161790556001606555604051908152f35b34610563576020366003190112610563576004355f52610160602052606060405f205463ffffffff906040519180821683528160201c16602083015260018060a01b039060401c166040820152f35b34610563576020366003190112610563576004356001600160a01b0381169081900361056357611d69336143be565b80611da3575b6101cb906001600160601b0360a01b82541617905560026040515f80516020615a7383398151915233918061111581613d4b565b6040516301ffc9a760e01b8152634058856760e11b6004820152602081602481855afa908115610ade575f91611df0575b50611d6f576024906040519062be74ab60e51b82526004820152fd5b611e09915060203d602011610ad757610ac98183613646565b82611dd4565b34610563576020366003190112610563576004355f52610231602052602060018060a01b0360405f205416604051908152f35b34610563575f3660031901126105635760c06101c95460018060a01b036101ca54906101cb549160405193828116855260a01c6020850152818116604085015260a01c60608401528116608083015260a01c60a0820152f35b34610563575f3660031901126105635760206101c854604051908152f35b608036600319011261056357611ecd61353d565b606435906001600160401b03821161056357611ef0610f68923690600401613857565b91611ef96145ca565b60405190611f068261362b565b5f82526044359060243590614620565b346105635760031960603682011261056357611f3061353d565b906001600160401b036024803582811161056357611f52903690600401613827565b93909260449060443590811161056357611f70903690600401613827565b9460018060a01b039687891698338a14158061223e575b6122155750611fa49291611f9c913691613703565b953691613703565b9186156121c457611fb885518451146144b4565b60405190611fc58261362b565b5f82525f966101cb54169182612129575b505050845b845181101561202e57611fee8186613ccd565b5186526101c660205260ff60036040882001541680612026575b61201457600101611fdb565b604051633518113960e01b8152600490fd5b506001612008565b50859392935f5b84518110156120e5576120488186613ccd565b516120538286613ccd565b5190805f52609760209080825260405f20865f52825260405f2054928484106120975790600195949392915f52815260405f2090865f52520360405f205501612035565b6084837f455243313135353a206275726e20616d6f756e7420657863656564732062616c8a8e6040519362461bcd60e51b855260048501528084015282015263616e636560e01b6064820152fd5b5f82867f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb61211b88604051918291339583613fb4565b0390a461001860405161362b565b823b156105635761218c92875f8b61219b829661217c96604051998a9889978896634058856760e11b8852306004890152336024890152604488015287606488015260e0608488015260e48701906137ca565b838682030160a48701528d6137ca565b918483030160c4850152613569565b03925af18015610ade576121b1575b8080611fd6565b6121bc9195506135fd565b5f93866121aa565b60405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b6040516341ce11f960e11b81523360048201526001600160a01b03919091166024820152604490fd5b50895f52609860205260405f20335f5260205260ff60405f20541615611f87565b34610563576020366003190112610563576004355f526101c7602052602060018060a01b0360405f205416604051908152f35b34610563576040366003190112610563576004356024356001600160a01b03811690819003610563576122c36145ca565b6122cd8233614174565b815f5260209061012d825260405f20816001600160601b0360a01b82541617905580612388575b6040513382857f5010f780a0de79bcfb9f3d6fec3cfe29758ef5c5800d575af709bc590bd78ade5f80a48361235557507f56e810c8cae84731149f628981d25769a084570b9ba6eebf3c32879e3dce56099250604051908152a16001606555005b604091505f837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b948352820152a2610f68565b6040516301ffc9a760e01b8152633de3f32360e11b60048201528281602481855afa908115610ade575f916123d5575b506122f4576024906040519063da755beb60e01b82526004820152fd5b6123ec9150833d8511610ad757610ac98183613646565b846123b8565b34610563576020366003190112610563576020610884600435613ce1565b346105635761241e366137fd565b6001600160a01b0392909183163381148061252f575b15612520575b5f8281526101fe6020818152604080842085855282528320805496199096169586905594909391839083905f80516020615a938339815191529080a4159182612511575b826124f0575b505061248c57005b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0915f6040926101c9928354936001600160601b0360a01b85169055845193168352820152a15f6040515f80516020615a7383398151915233918061111581613d4b565b9091505f8052825260405f20905f528152600260405f205416158380612484565b6101c95485168214925061247e565b61252a8233614279565b61243a565b50815f526101fe60205260405f20335f52602052828060405f20541614612434565b34610563575f366003190112610563575f80516020615ab3833981519152546040516001600160a01b039091168152602090f35b34610563575f366003190112610563577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036125dc5760206040515f80516020615ab38339815191528152f35b60405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608490fd5b60403660031901126105635761265b61353d565b6024356001600160401b0381116105635761267a9036906004016136b8565b90806001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116906126b430831415613bea565b5f80516020615ab3833981519152916126d282845416918214613c4b565b6126db336143be565b6040516321f7434760e01b81526001600160a01b0391821660048201529316602484015260209283816044817f000000000000000000000000000000000000000000000000000000000000000086165afa908115610ade575f916128ef575b5015610563577f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561277757505050610018915061565d565b83929316906040516352d1902d60e01b81528481600481865afa5f91816128c0575b506127fa5760405162461bcd60e51b815260048101869052602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b03612869576128088261565d565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2825115801590612861575b61283d57005b5f806100189461284b6152cb565b9481519101845af461285b613e0e565b916159dd565b506001612837565b60405162461bcd60e51b815260048101849052602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608490fd5b9091508581813d83116128e8575b6128d88183613646565b8101031261056357519087612799565b503d6128ce565b6129069150843d8611610ad757610ac98183613646565b8661273a565b34610563576040366003190112610563576001600160401b0360043581811161056357366023820112156105635761294e90369060248160040135910161376c565b9060243590811161056357612967903690600401613751565b9080518251036129fe5780519161297d836136ec565b9261298b6040519485613646565b80845261299a601f19916136ec565b013660208501375f5b82518110156129e8576001906129d76001600160a01b036129c48387613ccd565b51166129d08386613ccd565b51906138bf565b6129e18287613ccd565b52016129a3565b60405160208082528190610862908201876137ca565b60405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608490fd5b3461056357604036600319011261056357612a6e613553565b6004355f526101fe60205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b34610563575f36600319011261056357612ab3336140f1565b4760018060a01b03906101ca915f80808085858854166204baf0f1612ad6613e0e565b5015612ade57005b915460405163292264c360e21b8152921660048301526024820152604490fd5b346105635760208060031936011261056357612b1861353d565b6001600160a01b03917f00000000000000000000000000000000000000000000000000000000000000008316612b5030821415613bea565b612bac82845f80516020615ab383398151915293612b7388865416918214613c4b565b612b7c336143be565b6040516321f7434760e01b81526001600160a01b0391821660048201529116602482015291829081906044820190565b0381887f0000000000000000000000000000000000000000000000000000000000000000165afa908115610ade575f91612d29575b50156105635760405193612bf48561362b565b5f85527f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612c2e57505050610018915061565d565b83929316906040516352d1902d60e01b81528481600481865afa5f9181612cfa575b50612cb15760405162461bcd60e51b815260048101869052602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b0361286957612cbf8261565d565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2825115801590612cf35761283d57005b505f612837565b9091508581813d8311612d22575b612d128183613646565b8101031261056357519087612c50565b503d612d08565b612d409150833d8511610ad757610ac98183613646565b85612be1565b346105635760a036600319011261056357612d5f61353d565b612d67613553565b6001600160401b0360443581811161056357612d87903690600401613751565b9260643582811161056357612da0903690600401613751565b9160843590811161056357612db99036906004016136b8565b9360018060a01b0394612e01818584888a88169a338c148015612fd2575b612de090613b87565b612ded83518551146144b4565b811697612dfb891515614511565b33615424565b5f5b8251811015612e865780612e1960019285613ccd565b51612e248288613ccd565b5190805f52609760209181835260405f208c5f5283528360405f2054612e4c8282101561456b565b825f528385528d60405f20905f5285520360405f20555f52815260405f2090875f5252612e7e60405f20918254613d91565b905501612e03565b509291909381866040517f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb339180612ebf898c83613fb4565b0390a43b612ec957005b612f095f612f1b95612f2d6020966040519889978896879563bc197c8160e01b9d8e8852336004890152602488015260a0604488015260a48701906137ca565b858103600319016064870152906137ca565b83810360031901608485015290613569565b03925af15f9181612fb1575b50612fa057612f46615580565b6308c379a014612f695760405162461bcd60e51b8152806104aa60048201615608565b612f7161559b565b80612f7c5750610491565b60405162461bcd60e51b8152602060048201529081906104aa906024830190613569565b6001600160e01b031916036104f657005b612fcb91925060203d602011610537576105288183613646565b9083612f39565b508b5f52609860205260405f20335f52602052612de060ff60405f2054169050612dd7565b346105635761301561304d61302661300e366136d6565b9390613f19565b9263ffffffff602085015116613b42565b7f000000000000000000000000000000000000000000000000000000000000000090613b69565b60409182015182516001600160a01b0390911681526020810191909152f35b346105635760603660031901126105635761308561353d565b6024355f526101fe60205260405f209060018060a01b03165f52602052602060443560021760405f2054161515604051908152f35b34610563576040366003190112610563576001600160401b03600435602435828111610563576130ee9036906004016136b8565b916130f98233614174565b81156105635760405191807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6020948581528061313887820189613569565b0390a25f526101c6825260405f209183519182116107885761315a8354613940565b601f81116131fc575b5080601f831160011461319d57508192935f92613192575b50505f19600383901b1c191660019190911b179055005b01519050838061317b565b90601f19831694845f52825f20925f905b8782106131e45750508360019596106131cc575b505050811b019055005b01515f1960f88460031b161c191690558380806131c2565b806001859682949686015181550195019301906131ae565b835f52815f20601f840160051c810191838510613235575b601f0160051c01905b81811061322a5750613163565b5f815560010161321d565b9091508190613214565b34610563575f36600319011261056357602060405160088152f35b3461056357604036600319011261056357600435613276613553565b90805f526102318060205260018060a01b03918260405f20541633036132b6575f5260205260405f2091166001600160601b0360a01b8254161790555f80f35b604051632afb0ecf60e01b8152600490fd5b34610563576020366003190112610563576132e161353d565b6132ea336143be565b6001600160a01b0381165f9081525f80516020615ad383398151915260205260409020546002161561331f5761001890614441565b60405163131dd3a760e31b8152600490fd5b346105635760203660031901126105635761001861334d61353d565b613356336140f1565b61437d565b346105635760203660031901126105635761086261084e600435613ad5565b34610563575f366003190112610563576040516101938054825f61339d83613940565b92838352602094600191866001821691825f1461343a5750506001146133e0575b50506133cc92500383613646565b610862604051928284938452830190613569565b8592505f527ffc8af01f449989052b52093a58fc9f42d0b11f0c6dd5dca0463dab62346ccc68905f915b8583106134225750506133cc935082010185806133be565b8054838901850152879450869390920191810161340a565b92509350506133cc94915060ff191682840152151560051b82010185806133be565b346105635760203660031901126105635760043563ffffffff60e01b81168091036105635760209063152a902d60e11b81149081156134eb575b81156134a8575b506040519015158152f35b636cdb3d1360e11b8114915081156134da575b81156134c9575b508261349d565b6301ffc9a760e01b149050826134c2565b6303a24d0760e21b811491506134bb565b63023a443960e31b81149150613496565b34610563575f3660031901126105635760206040515f8152f35b346105635760403660031901126105635760206112bb61353461353d565b602435906138bf565b600435906001600160a01b038216820361056357565b602435906001600160a01b038216820361056357565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610563575f3660031901126105635760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b608081019081106001600160401b0382111761078857604052565b606081019081106001600160401b0382111761078857604052565b6001600160401b03811161078857604052565b604081019081106001600160401b0382111761078857604052565b602081019081106001600160401b0382111761078857604052565b90601f801991011681019081106001600160401b0382111761078857604052565b6001600160401b03811161078857601f01601f191660200190565b92919261368e82613667565b9161369c6040519384613646565b829481845281830111610563578281602093845f960137010152565b9080601f83011215610563578160206136d393359101613682565b90565b6040906003190112610563576004359060243590565b6001600160401b0381116107885760051b60200190565b929161370e826136ec565b9161371c6040519384613646565b829481845260208094019160051b810192831161056357905b8282106137425750505050565b81358152908301908301613735565b9080601f83011215610563578160206136d393359101613703565b9291613777826136ec565b916137856040519384613646565b829481845260208094019160051b810192831161056357905b8282106137ab5750505050565b81356001600160a01b038116810361056357815290830190830161379e565b9081518082526020808093019301915f5b8281106137e9575050505090565b8351855293810193928101926001016137db565b606090600319011261056357600435906024356001600160a01b0381168103610563579060443590565b9181601f84011215610563578235916001600160401b038311610563576020808501948460051b01011161056357565b9181601f84011215610563578235916001600160401b038311610563576020838186019501011161056357565b60208152608060606138a1845183602086015260a0850190613569565b93602081015160408501526040810151828501520151151591015290565b6001600160a01b03169081156138e8575f52609760205260405f20905f5260205260405f205490565b60405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b6064820152608490fd5b90600182811c9216801561396e575b602083101461395a57565b634e487b7160e01b5f52602260045260245ffd5b91607f169161394f565b9060405191825f825461398a81613940565b908184526020946001916001811690815f146139f857506001146139ba575b5050506139b892500383613646565b565b5f90815285812095935091905b8183106139e05750506139b893508201015f80806139a9565b855488840185015294850194879450918301916139c7565b925050506139b894925060ff191682840152151560051b8201015f80806139a9565b5f80526101c680602052613a3160405f2054613940565b613ac357505f80805261012d6020527fa581b17bfc4d6578e300cafbf34fd2dc1fef0270d8c73f88a99dcde2859a6639546001600160a01b03919082168015613abe575b6024604051809481936303a24d0760e21b8352856004840152165afa908115610ade575f91613aa2575090565b6136d391503d805f833e613ab68183613646565b810190614042565b613a75565b5f80526020526136d360405f20613978565b805f526101c680602052613aec60405f2054613940565b613b3057505f6001600160a01b03613b0383613fd9565b16916024604051809481936303a24d0760e21b835260048301525afa908115610ade575f91613aa2575090565b905f526020526136d360405f20613978565b81810292918115918404141715613b5557565b634e487b7160e01b5f52601160045260245ffd5b8115613b73570490565b634e487b7160e01b5f52601260045260245ffd5b15613b8e57565b60405162461bcd60e51b815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201526d195c881bdc88185c1c1c9bdd995960921b6064820152608490fd5b15613bf157565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608490fd5b15613c5257565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608490fd5b805115613cb95760200190565b634e487b7160e01b5f52603260045260245ffd5b8051821015613cb95760209160051b010190565b6001600160a01b03908190604090613cf890613f19565b01511680613d1057506101ca5416806136d357503090565b905090565b90816020910312610563575180151581036105635790565b60031115613d3757565b634e487b7160e01b5f52602160045260245ffd5b6101c9546001600160a01b03808216835260a091821c60208401526101ca548082166040850152821c60608401526101cb549081166080840152811c9082015260c00190565b91908201809211613b5557565b613daa90939293613f19565b9263ffffffff9182855116908115613df65790613dc992910690613d91565b835182165f190191808311613b5557613de3921690613b69565b6040909201516001600160a01b03169190565b5050506040909201516001600160a01b031691505f90565b3d15613e38573d90613e1f82613667565b91613e2d6040519384613646565b82523d5f602084013e565b606090565b9190613e48816136ec565b90613e566040519283613646565b808252601f19613e65826136ec565b015f5b818110613f0857505081935f5b828110613e825750505050565b8060051b820135601e1983360301811215610563578201908135916001600160401b038311610563576020809101908336038213610563575f80613ecd613eec946001973691613682565b613ed56152cb565b9381519101305af4613ee5613e0e565b90306159dd565b613ef68287613ccd565b52613f018186613ccd565b5001613e75565b806060602080938701015201613e68565b6040805191613f27836135e2565b5f83525f82602094828682015201525f52610160808352815f20549060018060a01b03918281851c1680613f8a5750505f80528352815f2092825193613f6c856135e2565b549063ffffffff808316865282821c1690850152821c169082015290565b939250939050815193613f9c856135e2565b63ffffffff908181168652821c169084015282015290565b9091613fcb6136d3936040845260408401906137ca565b9160208184039101526137ca565b5f90815261012d60205260409020546001600160a01b0390811691908215613ffe5750565b5f8080526040902054169150565b92919261401882613667565b916140266040519384613646565b829481845281830111610563578281602093845f96015e010152565b602081830312610563578051906001600160401b03821161056357019080601f830112156105635781516136d39260200161400c565b5f805261012d6020527fa581b17bfc4d6578e300cafbf34fd2dc1fef0270d8c73f88a99dcde2859a6639546001600160a01b0390811680156140ec575b16806140c457506136d3613a1a565b5f6004916040519283809263e8a3d48560e01b82525afa908115610ade575f91613aa2575090565b6140b5565b6001600160a01b03165f8181525f80516020615ad38339815191526020526040902054602216158015906101fe90614152575b501561412d5750565b60649060405190634baa2a4d60e01b825260048201525f602482015260206044820152fd5b90505f805260205260405f20815f52602052602260405f20541615155f614124565b90805f526101fe8060205260405f209260018060a01b031692835f52602052601260405f20541615908115916141d4575b50156141af575050565b6064925060405191634baa2a4d60e01b83526004830152602482015260106044820152fd5b90505f805260205260405f20825f52602052601260405f20541615155f6141a5565b6001600160a01b03165f8181525f80516020615ad38339815191526020526040902054600616158015906101fe90614257575b50156142325750565b60649060405190634baa2a4d60e01b825260048201525f602482015260046044820152fd5b90505f805260205260405f20815f52602052600660405f20541615155f614229565b90805f526101fe8060205260405f209260018060a01b031692835f52602052600260405f20541615908115916142d9575b50156142b4575050565b6064925060405191634baa2a4d60e01b83526004830152602482015260026044820152fd5b90505f805260205260405f20825f52602052600260405f20541615155f6142aa565b90805f526101fe8060205260405f209260018060a01b031692835f52602052600660405f205416159081159161435b575b5015614336575050565b6064925060405191634baa2a4d60e01b83526004830152602482015260046044820152fd5b90505f805260205260405f20825f52602052600660405f20541615155f61432c565b6101ca9060018060a01b03166001600160601b0360a01b82541617905560016040515f80516020615a738339815191523391806143b981613d4b565b0390a3565b6001600160a01b03165f8181525f80516020615ad38339815191526020526040902054600216158015906101fe9061441f575b50156143fa5750565b60649060405190634baa2a4d60e01b825260048201525f602482015260026044820152fd5b90505f805260205260405f20815f52602052600260405f20541615155f6143f1565b6101c980546001600160a01b039283166001600160a01b0319821681179092556040805193909116835260208301919091527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a15f6040515f80516020615a738339815191523391806143b981613d4b565b156144bb57565b60405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608490fd5b1561451857565b60405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b1561457257565b60405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608490fd5b6002606554146145db576002606555565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b9592949192909161463a836001600160a01b0389166142fb565b614664847f0000000000000000000000000000000000000000000000000000000000000000613b42565b945f965f96855f5261023160205260018060a01b0360405f205416918215614dd5575b805115614dad576001600160a01b03906146a090613cac565b5116905b6001600160a01b03821615614d85575b6146bd87613ce1565b906001600160a01b03821615614d5d575b5f88815261023260205260409020546001600160a01b03168015614d56575b6146f561598f565b508134105f1461471157604051633b78763760e21b8152600490fd5b348203614cc05761472061598f565b5061472961598f565b6302625a008082526020820162989680815260408301906301312d00825260608401915f8352838702938785041487151715613b55576147aa6147aa926147b2956305f5e10080910488528061478083518c613b42565b0482528061478f85518c613b42565b04845261479d86518b613b42565b0485528651905190613d91565b905190613d91565b8303838111613b55576080820152915b82519384614cba57505f915b60208401516040850151606086015160809096015191959192907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b156105635760405163faa3516f60e01b81526001600160a01b039687166004820152602481019890985298851660448801526064870195909552958316608486015260a485019690965291811660c484015260e48301939093527f00000000000000000000000000000000000000000000000000000000000000008316610104830152610124820193909352915f918391610144918391907f0000000000000000000000000000000000000000000000000000000000000000165af18015610ade57614ca4575b508160c488926040519485938492636890e5b360e01b84523360048501528960248501528a60448501528b606485015260a060848501528160a4850152848401378181018301859052601f01601f19168101030181836001600160a01b038c165af1908115614c99578691614af7575b505192855b8451811015614aaf576149628186613ccd565b515161496d81613d2d565b61497681613d2d565b60018103614a0a5750602061498b8287613ccd565b510151604081805181010312614a065760406149a9602083016159c9565b910151908188116149f45788918291829182916001600160a01b03166204baf0f16149d2613e0e565b50156149e2576001905b0161494f565b6040516338dcead760e21b8152600490fd5b604051631913cf3760e21b8152600490fd5b8780fd5b80614a16600292613d2d565b03614aa7576020614a278287613ccd565b51015190606082805181010312614a0657614a44602083016159c9565b916060604082015191015190868015159182614a9c575b5050614a8a57600192614a85918760405192614a768461362b565b8c8452868060a01b03166156ec565b6149dc565b604051634cdcfbf960e01b8152600490fd5b14159050865f614a5b565b6001906149dc565b506040805191825234602083015291969295506001600160a01b0390921693503392507fb362243af1e2070d7d5bf8d713f2e0fab64203f1b71462afbe20572909788c5e91a4565b3d91508187823e614b088282613646565b6020818381010312614c95578051906001600160401b038211614a065760408282018483010312614a065760405192614b4084613610565b828201516001600160401b038111614c9157818301601f8286860101011215614c9157808484010151614b72816136ec565b92614b806040519485613646565b818452602084019281860160208460051b838a8a0101010111614c8d576020818888010101935b60208460051b838a8a010101018510614bd45750505050509060209291845201015160208201525f61494a565b84516001600160401b038111614c89576040888a0184018201858a0103601f190112614c895760405190614c0782613610565b602081858c8c01010101516003811015614c84578252604081858c8c0101010151906001600160401b038211614c8457858a018b8b01860182018301603f011215614c8457898b018501010160208181015190938493849391929091614c7391898e019160400161400c565b838201528152019501949050614ba7565b508f80fd5b8e80fd5b8c80fd5b8980fd5b8680fd5b6040513d88823e3d90fd5b60c49750614cb1906135fd565b815f97506148da565b916147ce565b909950614ccb61598f565b50614cd461598f565b5f8152602081016298968081528b60408301916301c9c3808352600160608501925f8452151715613b5557614d3e926147aa8f926147aa935f885261479d6305f5e1009182614d24855183613b42565b04845282614d33875183613b42565b048652875190613b42565b8b038b8111613b55576080820152908a34039a6147c2565b50816146ed565b7f000000000000000000000000000000000000000000000000000000000000000091506146ce565b7f000000000000000000000000000000000000000000000000000000000000000091506146b4565b507f0000000000000000000000000000000000000000000000000000000000000000906146a4565b7f00000000000000000000000000000000000000000000000000000000000000009250614687565b6101c8805460018101909155604051959490939290614e1b876135c7565b8287528160208801525f60408801528015156060880152845f526101c660205260405f209680519788516001600160401b03811161078857614e5d8254613940565b99601f8b116150a3575b88999a505f98979850602090601f8311600114614ffc579488614fa69795614f0a8296865f80516020615a53833981519152976020977f1b944478023872bf91b25a13fdba3a686fdb1bf4dbb872f850240fad4b8cc0689e9c5f92614ff1575b50508160011b915f199060031b1c19161781555b8583015160018201556040830151600282015560036060840151151591019060ff801983541691151516179055565b7f323bc81dbd896aad1241aab7ac995a86244a273b7b4ac5263224b966cfd1283560405180614f3a339482613884565b0390a36040519015158152a25f8581526101fe602090815260408083206001600160a01b039990991680845298909152812080546002179081905590879087905f80516020615a938339815191529080a48151614fb2575b604051928392604084526040840190613569565b9060208301520390a390565b847f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6040516020815280614fe96020820187613569565b0390a2614f92565b015190505f80614ec7565b90835f5260205f20915f5b601f19851681106150885750614fa69795614f0a8b966001876020977f1b944478023872bf91b25a13fdba3a686fdb1bf4dbb872f850240fad4b8cc0689e9c978b975f80516020615a538339815191529b601f19811610615070575b505050811b018155614edb565b01515f1960f88460031b161c191690555f8080615063565b8183015184558c9a5060019093019260209283019201615007565b825f5260205f20601f830160051c81019b602084106150de575b601f0160051c019a5b8b81106150d35750614e67565b5f81556001016150c6565b909b508b906150bd565b156150ef57565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b9081516001600160401b03811161078857610193906151678254613940565b601f8111615229575b50602080601f83116001146151ab5750819293945f926151a0575b50508160011b915f199060031b1c1916179055565b015190505f8061518b565b90601f19831695845f527ffc8af01f449989052b52093a58fc9f42d0b11f0c6dd5dca0463dab62346ccc68925f905b888210615211575050836001959697106151f9575b505050811b019055565b01515f1960f88460031b161c191690555f80806151ef565b806001859682949686015181550195019301906151da565b825f527ffc8af01f449989052b52093a58fc9f42d0b11f0c6dd5dca0463dab62346ccc68601f830160051c81019160208410615281575b601f0160051c01905b8181106152765750615170565b5f8155600101615269565b9091508190615260565b6001600160a01b03165f8181525f80516020615ad38339815191526020526040812080546002179081905591905f80516020615a938339815191528180a4565b604051906152d8826135e2565b60278252660819985a5b195960ca1b6040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b6101cb545f9593946001600160a01b0394929392918516919082615392575b505050505050815b815181101561538d5761534e8183613ccd565b5183526101c6602052604060ff600382862001541680615386575b615376575060010161533b565b51633518113960e01b8152600490fd5b5083615369565b505050565b823b15610563575f946153f886928894604051998a9889978896634058856760e11b885230600489015216602487015286604487015216606485015260e0608485015261218c6153e560e486018d6137ca565b60031993848783030160a48801526137ca565b03925af18015610ade57615411575b8080808080615333565b61541c9192506135fd565b5f905f615407565b6101cb545f9692956001600160a01b0395949186169081615494575b5050505050835b815181101561548d5761545a8183613ccd565b5185526101c6602052604060ff600382882001541680615482575b6153765750600101615447565b508385161515615475565b5050505050565b813b15610563575f80946154ec8997938894858d986040519b8c9a8b998a98634058856760e11b8a523060048b015216602489015216604487015216606485015260e0608485015261218c6153e560e486018d6137ca565b03925af18015610ade57615504575b80808080615440565b61550f9194506135fd565b5f925f6154fb565b9081602091031261056357516001600160e01b0319811681036105635790565b60809060208152602860208201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b60608201520190565b5f9060033d1161558c57565b905060045f803e5f5160e01c90565b5f60443d106136d357604051600319913d83016004833e81516001600160401b03918282113d6024840111176155f7578184019485519384116155ff573d850101602084870101116155f757506136d392910160200190613646565b949350505050565b50949350505050565b60809060208152603460208201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356040820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60608201520190565b803b15615691575f80516020615ab383398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b91926156f884836158bb565b815f526020926101c684526040946002865f2001615717828254613d91565b90556001600160a01b0382169161572f831515615914565b61574d8461573c8761596a565b6157458561596a565b908433615314565b845f5260978652865f20835f528652865f2061576a838254613d91565b9055825f885187815284898201527fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a3392a43b6157ab575b505050505050565b9184959694916157f1935f895180968195829463f23a6e6160e01b9a8b85523360048601528560248601526044850152606484015260a0608484015260a4830190613569565b03925af15f918161589c575b506158645750505061580d615580565b6308c379a014615830575b505162461bcd60e51b8152806104aa60048201615608565b61583861559b565b90816158445750615818565b6104aa835192839262461bcd60e51b845260048401526024830190613569565b919392506001600160e01b03199091160361588557505f80808080806157a3565b5162461bcd60e51b8152806104aa60048201615537565b6158b4919250853d8711610537576105288183613646565b905f6157fd565b90815f526101c660205260405f209060028201549060016158dc8284613d91565b9301548093116158ec5750505050565b6084945060405193631255c8fd60e01b85526004850152602484015260448301526064820152fd5b1561591b57565b60405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608490fd5b6040519061597782613610565b600182526020368184013761598b82613cac565b5290565b6040519060a082018281106001600160401b03821117610788576040525f6080838281528260208201528260408201528260608201520152565b51906001600160a01b038216820361056357565b91929015615a3f57508151156159f1575090565b3b156159fa5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015612f7c5750805190602001fdfed7266d744eff586b57e3bcc53ca2c87fa8be61a1938b5a680f1b72568415f5da3be6d3a1d957610f7e900c66889b874cdc9f0c22901aa8be6ec3d2d04c14ca0f35fb03d0d293ef5b362761900725ce891f8f766b5a662cdd445372355448e7ca360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f4301e3e862ad13c0503d3de32ba4e2e40c90733d1da23c9df4d0addbcf6508a2646970667358221220161979abd6f035e00756a768c7050d2df7f235ad8218fd261e3b6b424fab931564736f6c634300081900330000000000000000000000000000000000000000000000000000b5e620f480000000000000000000000000002730b29acbbcd34a59b720338e8d06619fd71aca000000000000000000000000ebd1b99336cddefea2380566186f849c38a100ce0000000000000000000000004c13392af76050fdc2f0601e9ac1dc3a0c823f87