0 txs
6.9k calls
constructor
constructor()
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isPaymentToken
viewfunction isPaymentToken(address token) view returns (bool)
magaToken
viewfunction magaToken() view returns (address)
minSignatures
viewfunction minSignatures() view returns (uint256)
nonces
viewfunction nonces(address owner) view returns (uint256)
paymentReceiver
viewfunction paymentReceiver() view returns (address)
paymentTokens
viewfunction paymentTokens() view returns (address[3])
SIGNER_ROLE
viewfunction SIGNER_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
buy
payablefunction buy(address paymentToken, uint256 paymentAmount, uint256 withdrawalAmount, uint256 expirationTime, uint256 nonce, bytes[] signatures) payable
changeMinSignatures
nonpayablefunction changeMinSignatures(uint256 newMinSignatures)
changePaymentReceiver
nonpayablefunction changePaymentReceiver(address receiver)
claim
nonpayablefunction claim(uint256 withdrawalAmount, uint256 nonce, bytes[] signatures)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _admin, address[] _signers, address _receiver, address _token, address _usdc, address _usdt)
recoverERC20
nonpayablefunction recoverERC20(address token, uint256 amount)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
events
Buy
event Buy(address sender, address paymentToken, uint256 paymentAmount, uint256 withdrawalAmount)
Claim
event Claim(address sender, uint256 withdrawalAmount)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
MinSignaturesChanged
event MinSignaturesChanged(uint256 newMinSignatures)
PaymentReceiverChanged
event PaymentReceiverChanged(address newReceiver)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
TokenRecover
event TokenRecover(address token, uint256 amount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidInitialization
error InvalidInitialization()
MinSignaturesLength
error MinSignaturesLength(uint256 minimalLength, uint256 currentLength)
NativeTransferFailed
error NativeTransferFailed(address receiver, uint256 amount)
NonExistedToken
error NonExistedToken(address paymentToken)
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SignatureExpired
error SignatureExpired(uint256 currentTime, uint256 expirationTime)
WrongPaymentAmount
error WrongPaymentAmount(uint256 paymentAmount, uint256 providedAmount)
ZeroInput
error ZeroInput()
creation bytecode
0x6080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b612ab2806100d65f395ff3fe608060405260043610610162575f3560e01c806359f13e34116100c6578063930eaddc1161007c578063cb37f3b211610057578063cb37f3b2146104a6578063d547741f146104d2578063e9974ee3146104f1575f5ffd5b8063930eaddc14610441578063a1ebf35d14610460578063a217fddf14610493575f5ffd5b806384b0196e116100ac57806384b0196e1461038b5780638980f11f146103b257806391d14854146103d1575f5ffd5b806359f13e341461030c5780637ecebe001461032b575f5ffd5b806325ef180d1161011b5780632f2ff15d116101015780632f2ff15d146102bb57806336568abe146102da57806341fa3d82146102f9575f5ffd5b806325ef180d146102495780632ef4cf971461026a575f5ffd5b8063146b99e51161014b578063146b99e5146101bb578063238acaa2146101da578063248a9ca3146101fc575f5ffd5b806301ffc9a71461016657806304f78f871461019a575b5f5ffd5b348015610171575f5ffd5b50610185610180366004612396565b610510565b60405190151581526020015b60405180910390f35b3480156101a5575f5ffd5b506101b96101b43660046123dc565b6105a8565b005b3480156101c6575f5ffd5b506101b96101d536600461245e565b610627565b3480156101e5575f5ffd5b506101ee5f5481565b604051908152602001610191565b348015610207575f5ffd5b506101ee6102163660046123dc565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b348015610254575f5ffd5b5061025d6109fe565b60405161019191906124ef565b348015610275575f5ffd5b506001546102969073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b3480156102c6575f5ffd5b506101b96102d5366004612535565b610a4f565b3480156102e5575f5ffd5b506101b96102f4366004612535565b610a98565b6101b961030736600461255f565b610af6565b348015610317575f5ffd5b506101b96103263660046125d4565b610db7565b348015610336575f5ffd5b506101ee6103453660046125d4565b73ffffffffffffffffffffffffffffffffffffffff165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090205490565b348015610396575f5ffd5b5061039f610e81565b6040516101919796959493929190612639565b3480156103bd575f5ffd5b506101b96103cc3660046126f8565b610f7b565b3480156103dc575f5ffd5b506101856103eb366004612535565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561044c575f5ffd5b5061018561045b3660046125d4565b611080565b34801561046b575f5ffd5b506101ee7fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f7081565b34801561049e575f5ffd5b506101ee5f81565b3480156104b1575f5ffd5b506002546102969073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104dd575f5ffd5b506101b96104ec366004612535565b611104565b3480156104fc575f5ffd5b506101b961050b366004612720565b611147565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105a257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f6105b281611242565b815f036105eb576040517faf458c0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8290556040518281527f2384f6f4e09f65de43c8cd927f09cfdd288ef6ba85af030a25fbd33f480a4fd4906020015b60405180910390a15050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156106715750825b90505f8267ffffffffffffffff16600114801561068d5750303b155b90508115801561069b575080155b156106d2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156107335784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b73ffffffffffffffffffffffffffffffffffffffff8c16158061076a575073ffffffffffffffffffffffffffffffffffffffff8816155b80610789575073ffffffffffffffffffffffffffffffffffffffff8916155b806107a8575073ffffffffffffffffffffffffffffffffffffffff8716155b806107c7575073ffffffffffffffffffffffffffffffffffffffff8616155b156107fe576040517faf458c0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61080661124f565b61087a6040518060400160405280600881526020017f4d61676153616c650000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250611259565b61088261124f565b61088a61126f565b6108945f8d61127f565b505f5b8a8110156108f8576108ef7fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f708d8d848181106108d5576108d561276f565b90506020020160208101906108ea91906125d4565b61127f565b50600101610897565b506001805473ffffffffffffffffffffffffffffffffffffffff808b167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600280548d83169316929092179091555f919091556040805160608101825273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee815289831660208201529188169082015261098e90600390816122e7565b5083156109f05784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b610a06612364565b60408051606081019182905290600390819081845b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a1b575050505050905090565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a8881611242565b610a92838361127f565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610ae7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610af1828261139d565b505050565b610afe611479565b610b0787611080565b610b5a576040517f93ca79da00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201526024015b60405180910390fd5b841580610b65575085155b15610b9c576040517faf458c0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035473ffffffffffffffffffffffffffffffffffffffff888116911614348115610c0957878114610c04576040517f5755f3b60000000000000000000000000000000000000000000000000000000081526004810189905260248101829052604401610b51565b610c4a565b8015610c4a576040517f5755f3b60000000000000000000000000000000000000000000000000000000081525f600482015260248101829052604401610b51565b854210610c8c576040517ff88f049000000000000000000000000000000000000000000000000000000000815242600482015260248101879052604401610b51565b33610c9e5f828c8c8c8c8c8c8c6114fa565b610ca8818761193e565b8215610cd657600254610cd19073ffffffffffffffffffffffffffffffffffffffff168a6119e2565b610cff565b600254610cff9073ffffffffffffffffffffffffffffffffffffffff8c8116918491168c611ab1565b600154610d239073ffffffffffffffffffffffffffffffffffffffff16828a611b3a565b6040805173ffffffffffffffffffffffffffffffffffffffff80841682528c1660208201529081018a9052606081018990527f89f5adc174562e07c9c9b1cae7109bbecb21cf9d1b2847e550042b8653c54a0e9060800160405180910390a1505050610dae60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b5f610dc181611242565b73ffffffffffffffffffffffffffffffffffffffff8216610e0e576040517faf458c0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fd74dcada17f127805d024ccd9a15a9e7ad64d6ca82f3a0d03a3e1ac0f322c3379060200161061b565b5f60608082808083817fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008054909150158015610ebf57506001810154155b610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606401610b51565b610f2d611b9e565b610f35611c71565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009c939b5091995046985030975095509350915050565b5f610f8581611242565b610f8d611479565b73ffffffffffffffffffffffffffffffffffffffff83161580610fae575081155b15610fe5576040517faf458c0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3361100773ffffffffffffffffffffffffffffffffffffffff85168285611b3a565b6040805173ffffffffffffffffffffffffffffffffffffffff86168152602081018590527f8c08ba46523646cf83c070056fa074bdaa1956158fba20387ad0521ca5733d66910160405180910390a150610af160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f600381015473ffffffffffffffffffffffffffffffffffffffff838116911614806110c6575060045473ffffffffffffffffffffffffffffffffffffffff8381169116145b806110eb575060055473ffffffffffffffffffffffffffffffffffffffff8381169116145b156110f857506001919050565b505f919050565b919050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461113d81611242565b610a92838361139d565b61114f611479565b835f03611188576040517faf458c0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3361119b6001825f8089818a8a8a6114fa565b6111a5818561193e565b6001546111c99073ffffffffffffffffffffffffffffffffffffffff168287611b3a565b6040805173ffffffffffffffffffffffffffffffffffffffff83168152602081018790527f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4910160405180910390a150610a9260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61124c8133611cc2565b50565b611257611d68565b565b611261611d68565b61126b8282611dcf565b5050565b611277611d68565b611257611e41565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16611394575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556113303390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506105a2565b5f9150506105a2565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615611394575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506105a2565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016114f4576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6115536040518061010001604052805f81526020015f81526020015f81526020015f8152602001606081526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581525090565b604081018290525f54606082018190528210156115af57606081015160408083015190517ffeb9c08a00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610b51565b806060015167ffffffffffffffff8111156115cc576115cc61279c565b6040519080825280602002602001820160405280156115f5578160200160208202803683370190505b5060808201525b6040810151815110156118dd578961170857604080517f6034c6363d0a6a0670cd5ba418e15de1ddcc531e46e3925e200fe4933c1cad9b602082015273ffffffffffffffffffffffffffffffffffffffff808c169282019290925290891660608201526080810188905260a0810187905260c0810186905260e08101859052611703906116a390610100015b60405160208183030381529060405280519060200120611e49565b8484845f01518181106116b8576116b861276f565b90506020028101906116ca91906127c9565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611e9092505050565b61176e565b604080517f8d4faa3c1ea9280459f356e0b14248880c596ed2736357d0ca13f444d3d18f7c602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018790526080810185905261176e906116a39060a001611688565b73ffffffffffffffffffffffffffffffffffffffff1660c082018190525f9081527fed82e8858f919528fd86c81da277f0812ef4876fae8bc5251645af9640d3f49f602052604090205460ff16156118c2575f60208201525b8060a001518160200151101561184b578060c0015173ffffffffffffffffffffffffffffffffffffffff16816080015182602001518151811061180c5761180c61276f565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361183b57600160e082015261184b565b60208101805160010190526117c7565b8060e001516118bb5760c0810151608082015160a0830180519061186e8261282a565b9052815181106118805761188061276f565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b5f60e08201525b606081015160a0820151146118dd57805160010181526115fc565b80606001518160a00151101561193257606081015160a08201516040517ffeb9c08a00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610b51565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260409020805460018101909155818114610af1576040517f752d88c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604401610b51565b604080515f8082526020820190925273ffffffffffffffffffffffffffffffffffffffff8416908390604051611a189190612886565b5f6040518083038185875af1925050503d805f8114611a52576040519150601f19603f3d011682016040523d82523d5f602084013e611a57565b606091505b5050905080610af1576040517fa5b05eec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610b51565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052610a929186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611eb8565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052610af191859182169063a9059cbb90606401611af3565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091611bef9061289c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1b9061289c565b8015611c665780601f10611c3d57610100808354040283529160200191611c66565b820191905f5260205f20905b815481529060010190602001808311611c4957829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091611bef9061289c565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661126b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610b51565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611257576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dd7611d68565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102611e238482612938565b5060038101611e328382612938565b505f8082556001909101555050565b611b78611d68565b5f6105a2611e55611f57565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f5f5f5f611e9e8686611f65565b925092509250611eae8282611fae565b5090949350505050565b5f5f60205f8451602086015f885af180611ed7576040513d5f823e3d81fd5b50505f513d91508115611eee578060011415611f08565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610a92576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610b51565b5f611f606120b1565b905090565b5f5f5f8351604103611f9c576020840151604085015160608601515f1a611f8e88828585612124565b955095509550505050611fa7565b505081515f91506002905b9250925092565b5f826003811115611fc157611fc1612a4f565b03611fca575050565b6001826003811115611fde57611fde612a4f565b03612015576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561202957612029612a4f565b03612063576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610b51565b600382600381111561207757612077612a4f565b0361126b576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610b51565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6120db612217565b6120e3612292565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561215d57505f9150600390508261220d565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156121ae573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661220457505f92506001915082905061220d565b92505f91508190505b9450945094915050565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10081612242611b9e565b80519091501561225a57805160209091012092915050565b81548015612269579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100816122bd611c71565b8051909150156122d557805160209091012092915050565b60018201548015612269579392505050565b8260038101928215612354579160200282015b8281111561235457825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906122fa565b50612360929150612382565b5090565b60405180606001604052806003906020820280368337509192915050565b5b80821115612360575f8155600101612383565b5f602082840312156123a6575f5ffd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146123d5575f5ffd5b9392505050565b5f602082840312156123ec575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146110ff575f5ffd5b5f5f83601f840112612426575f5ffd5b50813567ffffffffffffffff81111561243d575f5ffd5b6020830191508360208260051b8501011115612457575f5ffd5b9250929050565b5f5f5f5f5f5f5f60c0888a031215612474575f5ffd5b61247d886123f3565b9650602088013567ffffffffffffffff811115612498575f5ffd5b6124a48a828b01612416565b90975095506124b79050604089016123f3565b93506124c5606089016123f3565b92506124d3608089016123f3565b91506124e160a089016123f3565b905092959891949750929550565b6060810181835f5b600381101561252c57815173ffffffffffffffffffffffffffffffffffffffff168352602092830192909101906001016124f7565b50505092915050565b5f5f60408385031215612546575f5ffd5b82359150612556602084016123f3565b90509250929050565b5f5f5f5f5f5f5f60c0888a031215612575575f5ffd5b61257e886123f3565b96506020880135955060408801359450606088013593506080880135925060a088013567ffffffffffffffff8111156125b5575f5ffd5b6125c18a828b01612416565b989b979a50959850939692959293505050565b5f602082840312156125e4575f5ffd5b6123d5826123f3565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201525f61267360e08301896125ed565b828103604084015261268581896125ed565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b818110156126e75783518352602093840193909201916001016126c9565b50909b9a5050505050505050505050565b5f5f60408385031215612709575f5ffd5b612712836123f3565b946020939093013593505050565b5f5f5f5f60608587031215612733575f5ffd5b8435935060208501359250604085013567ffffffffffffffff811115612757575f5ffd5b61276387828801612416565b95989497509550505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126127fc575f5ffd5b83018035915067ffffffffffffffff821115612816575f5ffd5b602001915036819003821315612457575f5ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361287f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5060010190565b5f82518060208501845e5f920191825250919050565b600181811c908216806128b057607f821691505b6020821081036128e7577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b601f821115610af157805f5260205f20601f840160051c810160208510156129125750805b601f840160051c820191505b81811015612931575f815560010161291e565b5050505050565b815167ffffffffffffffff8111156129525761295261279c565b61296681612960845461289c565b846128ed565b6020601f8211600181146129b7575f83156129815750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455612931565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015612a0457878501518255602094850194600190920191016129e4565b5084821015612a4057868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea264697066735822122038ff455fa0ef060d23b61e6e1cae4d40aff51ff726facc5ba9812d542ed2f4fd64736f6c634300081c0033