0 txs
273 calls
constructor
constructor(address _newEntryPoint, address _token, address _wrappedNativeToken)
functions
additionalGasCharge
viewfunction additionalGasCharge() view returns (uint32)
denylister
viewfunction denylister() view returns (address)
entryPoint
viewfunction entryPoint() view returns (address)
feeController
viewfunction feeController() view returns (address)
feeSpread
viewfunction feeSpread() view returns (uint32)
fetchPrice
viewfunction fetchPrice() view returns (uint256 price)
getDeposit
viewfunction getDeposit() view returns (uint256)
getDepositInfo
viewfunction getDepositInfo() view returns (tuple info)
isDenylisted
viewfunction isDenylisted(address _account) view returns (bool)
oracle
viewfunction oracle() view returns (address)
oracleDecimals
viewfunction oracleDecimals() view returns (uint8)
owner
viewfunction owner() view returns (address)
parsePermitData
purefunction parsePermitData(bytes paymasterAndData) pure returns (address tokenAddress, uint256 permitAmount, bytes permitSignature)
paused
viewfunction paused() view returns (bool)
pauser
viewfunction pauser() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
rescuer
viewfunction rescuer() view returns (address)
swapper
viewfunction swapper() view returns (address)
swapRouter
viewfunction swapRouter() view returns (address)
token
viewfunction token() view returns (address)
tokenDecimals
viewfunction tokenDecimals() view returns (uint8)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
wrappedNativeToken
viewfunction wrappedNativeToken() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
addStake
payablefunction addStake(uint32 unstakeDelaySec) payable
denylist
nonpayablefunction denylist(address _account)
deposit
payablefunction deposit() payable
initialize
nonpayablefunction initialize(address _owner, uint256 _additionalGasCharge, address _oracle, address _swapRouter)
initializeAll
nonpayablefunction initializeAll(address _owner, uint256 _additionalGasCharge, address _oracle, address _swapRouter, uint32 _feeSpread)
initializeV2
nonpayablefunction initializeV2(address _feeController, uint32 _feeSpread)
pause
nonpayablefunction pause()
postOp
nonpayablefunction postOp(uint8 mode, bytes context, uint256 actualGasCost, uint256 actualUserOpFeePerGas)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueNativeToken
nonpayablefunction rescueNativeToken(address to, uint256 amount)
swapForNative
nonpayablefunction swapForNative(uint256 amountIn, uint256 slippageBips, uint24 poolFee) returns (uint256 amountOut)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unDenylist
nonpayablefunction unDenylist(address _account)
unlockStake
nonpayablefunction unlockStake()
unpause
nonpayablefunction unpause()
updateAdditionalGasCharge
nonpayablefunction updateAdditionalGasCharge(uint32 newAdditionalGasCharge)
updateDenylister
nonpayablefunction updateDenylister(address _newDenylister)
updateFeeController
nonpayablefunction updateFeeController(address newFeeController)
updateFeeSpread
nonpayablefunction updateFeeSpread(uint32 newFeeSpread)
updateOracle
nonpayablefunction updateOracle(address newOracle)
updatePauser
nonpayablefunction updatePauser(address newPauser)
updateRescuer
nonpayablefunction updateRescuer(address newRescuer)
updateSwapper
nonpayablefunction updateSwapper(address newSwapper)
updateSwapRouter
nonpayablefunction updateSwapRouter(address newSwapRouter)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
validatePaymasterUserOp
nonpayablefunction validatePaymasterUserOp(tuple userOp, bytes32 userOpHash, uint256 maxCost) returns (bytes context, uint256 validationData)
withdrawStake
nonpayablefunction withdrawStake(address withdrawAddress)
events
AdditionalGasChargeChanged
event AdditionalGasChargeChanged(uint32 oldAdditionalGasCharge, uint32 newAdditionalGasCharge)
Denylisted
event Denylisted(address indexed account)
DenylisterChanged
event DenylisterChanged(address indexed oldDenylister, address indexed newDenylister)
FeeControllerChanged
event FeeControllerChanged(address indexed oldFeeController, address indexed newFeeController)
FeeSpreadChanged
event FeeSpreadChanged(uint32 oldFeeSpread, uint32 newFeeSpread)
Initialized
event Initialized(uint64 version)
NativeTokenRescued
event NativeTokenRescued(address indexed to, uint256 amount)
OracleChanged
event OracleChanged(address oldOracle, address newOracle)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PauserChanged
event PauserChanged(address indexed oldPauser, address indexed newPauser)
RescuerChanged
event RescuerChanged(address indexed oldRescuer, address indexed newRescuer)
SwapperChanged
event SwapperChanged(address indexed oldSwapper, address indexed newSwapper)
SwapRouterChanged
event SwapRouterChanged(address oldSwapRouter, address newSwapRouter)
TokenSwappedForNative
event TokenSwappedForNative(address indexed token, uint256 amountIn, uint256 amountOut)
UnDenylisted
event UnDenylisted(address indexed account)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
UserOperationSponsored
event UserOperationSponsored(address indexed token, address indexed sender, bytes32 userOpHash, uint256 nativeTokenPrice, uint256 actualTokenNeeded, uint256 feeTokenAmount)
errors
AccountDenylisted
error AccountDenylisted(address account)
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidAddress
error InvalidAddress()
InvalidDenylister
error InvalidDenylister()
InvalidEntrypoint
error InvalidEntrypoint(address sender)
InvalidInitialization
error InvalidInitialization()
InvalidOracle
error InvalidOracle()
InvalidOraclePrice
error InvalidOraclePrice(int256 oraclePrice)
InvalidRescuer
error InvalidRescuer()
InvalidSlippageBips
error InvalidSlippageBips(uint256 bips)
MalformedPaymasterData
error MalformedPaymasterData()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PostOpGasLimitTooLow
error PostOpGasLimitTooLow(uint256 actual, uint256 expected)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UnauthorizedDenylister
error UnauthorizedDenylister(address account)
UnauthorizedFeeController
error UnauthorizedFeeController(address account)
UnauthorizedPauser
error UnauthorizedPauser(address account)
UnauthorizedRescuer
error UnauthorizedRescuer(address account)
UnauthorizedSwapper
error UnauthorizedSwapper(address account)
UnsupportedToken
error UnsupportedToken(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x6101208060405234610195576060816143b9803803809161002082856101ac565b833981010312610195578051906001600160a01b03821682036101955760208101516001600160a01b03811691908290036101955760400151916001600160a01b03831683036101955760405163313ce56760e01b815290602082600481865afa9182156101a1575f9261015f575b503060805260a05261009f6101e3565b60c05260e052610100526100b16101e3565b6100b96101e3565b60405161411f908161027a8239608051818181611c3c01526120df015260a0518181816107a201528181610d1801528181610df301528181610ee201528181610fd50152818161111b015281816114490152818161363e0152613d85015260c05181818161249501526139d2015260e05181818161028d01528181610453015281816117dd0152818161189a0152611eb90152610100518181816105b801526135bb0152f35b9091506020813d602011610199575b8161017b602093836101ac565b81010312610195575160ff8116810361019557905f61008f565b5f80fd5b3d915061016e565b6040513d5f823e3d90fd5b601f909101601f19168101906001600160401b038211908210176101cf57604052565b634e487b7160e01b5f52604160045260245ffd5b5f5160206143995f395f51905f525460ff8160401c1661026a576002600160401b03196001600160401b038216016102185750565b6001600160401b0319166001600160401b039081175f5160206143995f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b63f92ee8a960e01b5f5260045ffdfe6080604052600436101561001a575b3615610018575f80fd5b005b5f5f3560e01c80630396cb60146136025780630fdb11cf146135df57806317fcb39b1461358e57806319bd4bf7146133d85780631c111be11461331f5780631c704f2e146132f85780631cb44dfc1461317c5780632a04b4181461307b5780632ab6004514612fad5780632b3297f914612f795780632d2a4f4214612a1a5780633371bfff1461296f578063358394d81461251457806337876f0d146124ed57806338a63183146124b95780633b97e8561461247b5780633f4ba83a146123a85780634f1ef2861461205657806352b7512c14611cb457806352d1902d14611c14578063554bab3c14611b7d5780635c975abb14611b3b57806366a1771914611aa45780636999b37714611a70578063715018a61461194c57806379ba5097146118c55780637c627b21146116b25780637dc0d1d01461167e5780638456cb591461157c5780638969e0f9146113c95780638da5cb5b146113765780639cab0c1c146112a25780639fd0506d1461126e578063a946de04146111a0578063ad3cb1cc1461113f578063b0d691fe146110ee578063b98b677f1461103a578063bb9fe6bf14610f9c578063bcc76c6014610f68578063c23a5cea14610ea0578063c31c9c0714610e6c578063c399ec8814610d98578063d0e30db014610cec578063d3033c3914610c55578063d34187b914610bda578063e1f45b6d14610ad4578063e30c397814610a81578063e68b52e714610a5d578063e877a52614610a13578063f0dbab08146103b3578063f2fde38b146102b45763fc0c546a14610261575061000e565b346102b157806003193601126102b157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b50346102b15760206003193601126102b15773ffffffffffffffffffffffffffffffffffffffff6102e36136dc565b6102eb613c16565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005416177f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005573ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b50346102b15760606003193601126102b15760043590602435916044359262ffffff8416809403610a0f5773ffffffffffffffffffffffffffffffffffffffff60ca541633036109e35761271081116109b85761040e613968565b670de0b6b3a76400008302838104670de0b6b3a7640000148415171561098b57610449610442610450949361271093613931565b928361391e565b0490613b58565b907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff60cb541673ffffffffffffffffffffffffffffffffffffffff8216916040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152306004820152826024820152602081604481875afa8015610980578590889061094a575b6104f79250613b1c565b90602087604051936105868561055a858201937f095ea7b300000000000000000000000000000000000000000000000000000000855289602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810187528661378e565b84519082855af187513d8261092e575b5050156108d0575b50505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169160405160e0810181811067ffffffffffffffff8211176108a3579086978796979260405284825260208201978689526040830191825260608301903082526080840186815260a0850191825260c085019286845260cb5473ffffffffffffffffffffffffffffffffffffffff16946040519c8d977f04e45aaf0000000000000000000000000000000000000000000000000000000089525173ffffffffffffffffffffffffffffffffffffffff1660048901525173ffffffffffffffffffffffffffffffffffffffff1660248801525162ffffff1660448701525173ffffffffffffffffffffffffffffffffffffffff1660648601525160848501525160a48401525173ffffffffffffffffffffffffffffffffffffffff1660c4830152815a9360e492602095f194851561089857849561085a575b5060407f51a83b94689a68fec565b0e103bb5bcfa16e90ecfa1a9d816bdb42b88335dd0b918151908152866020820152a2803b1561082b578180916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528860048401525af1801561084f5761083a575b505073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001682813b156102b15782916024604051809481937fb760faf90000000000000000000000000000000000000000000000000000000083523060048401525af1801561082f57610816575b602082604051908152f35b61082183809261378e565b61082b578161080b565b5080fd5b6040513d85823e3d90fd5b816108449161378e565b61082b57815f610789565b6040513d84823e3d90fd5b935093506020833d602011610890575b816108776020938361378e565b8101031261088c57915192849290604061070f565b5f80fd5b3d915061086a565b6040513d86823e3d90fd5b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b61092161092693604051907f095ea7b300000000000000000000000000000000000000000000000000000000602083015260248201528860448201526044815261091b60648261378e565b82613ffb565b613ffb565b5f808061059e565b9091506109425750833b15155b5f80610596565b60011461093b565b50506020813d602011610978575b816109656020938361378e565b8101031261088c57846104f791516104ed565b3d9150610958565b6040513d89823e3d90fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7ff1629a76000000000000000000000000000000000000000000000000000000008352600452602482fd5b6024837f9944d7d000000000000000000000000000000000000000000000000000000000815233600452fd5b8280fd5b50346102b15760206003193601126102b15760ff604060209273ffffffffffffffffffffffffffffffffffffffff610a496136dc565b168152606584522054166040519015158152f35b50346102b157806003193601126102b157602060ff60325460a01c16604051908152f35b50346102b157806003193601126102b157602073ffffffffffffffffffffffffffffffffffffffff7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005416604051908152f35b50346102b15760206003193601126102b157610aee6136c9565b60cc54903373ffffffffffffffffffffffffffffffffffffffff831603610bae577f72e34d910f95ef4d375f4572293ed6c623a3ae82882e9ade6e66c23138b691e991610ba8827bffffffff00000000000000000000000000000000000000000000000063ffffffff9460c01b167fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff84161760cc5560405193849360c01c168390929163ffffffff60209181604085019616845216910152565b0390a180f35b6024837f9d1c74ee00000000000000000000000000000000000000000000000000000000815233600452fd5b50346102b15760206003193601126102b1576004359067ffffffffffffffff82116102b15773ffffffffffffffffffffffffffffffffffffffff610c51610c2d610c27366004870161384c565b90613b7d565b9091604094939451958695168552602085015260606040850152606084019161387a565b0390f35b50346102b15760206003193601126102b157610c6f6136dc565b610c77613c16565b610c8081613cd5565b73ffffffffffffffffffffffffffffffffffffffff8060ca54921691827fffffffffffffffffffffffff000000000000000000000000000000000000000082161760ca55167f93dc3ed47fdc75c78489533e98556d849ccc6405a8165dc0c4b132ce3b945f578380a380f35b50806003193601126102b157610d00613c82565b8073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610d955781602491604051928380927fb760faf900000000000000000000000000000000000000000000000000000000825230600483015234905af1801561084f57610d845750f35b81610d8e9161378e565b6102b15780f35b50fd5b50346102b157806003193601126102b157604051907f70a0823100000000000000000000000000000000000000000000000000000000825230600483015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610e605790610e2d575b602090604051908152f35b506020813d602011610e58575b81610e476020938361378e565b8101031261088c5760209051610e22565b3d9150610e3a565b604051903d90823e3d90fd5b50346102b157806003193601126102b157602073ffffffffffffffffffffffffffffffffffffffff60cb5416604051908152f35b50346102b15760206003193601126102b15780610ebb6136dc565b610ec3613c16565b610ecb613c82565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b15610f645773ffffffffffffffffffffffffffffffffffffffff602484928360405195869485937fc23a5cea0000000000000000000000000000000000000000000000000000000085521660048401525af1801561084f57610d845750f35b5050fd5b50346102b157806003193601126102b157602073ffffffffffffffffffffffffffffffffffffffff60645416604051908152f35b50346102b157806003193601126102b157610fb5613c16565b610fbd613c82565b8073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610d95578180916004604051809481937fbb9fe6bf0000000000000000000000000000000000000000000000000000000083525af1801561084f57610d845750f35b50346102b15760206003193601126102b1577f5c5b0bb5085481c320dc523e3b3f829eaa807936f615add0077fa213f345090e604073ffffffffffffffffffffffffffffffffffffffff61108c6136dc565b611094613c16565b1661109e81613cd5565b60cb5490807fffffffffffffffffffffffff000000000000000000000000000000000000000083161760cb5573ffffffffffffffffffffffffffffffffffffffff8351921682526020820152a180f35b50346102b157806003193601126102b157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102b157806003193601126102b15750610c5160405161116260408261378e565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190613809565b50346102b15760206003193601126102b15773ffffffffffffffffffffffffffffffffffffffff6111cf6136dc565b6111d7613c16565b1680156112465773ffffffffffffffffffffffffffffffffffffffff606454827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617606455167fe144e84038182cefebda68c192c222085b2c12a85d135d3c938498c0165c01d38380a380f35b6004827f280b1c5e000000000000000000000000000000000000000000000000000000008152fd5b50346102b157806003193601126102b157602073ffffffffffffffffffffffffffffffffffffffff60c95416604051908152f35b50346102b15760206003193601126102b1576112bc6136dc565b73ffffffffffffffffffffffffffffffffffffffff60645416330361134a5773ffffffffffffffffffffffffffffffffffffffff168082526065602052604082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557fc904e1b03de0c20d7fcf9dbd056daf1bd3815e93f251199de815fd0f0b96e1668280a280f35b6024827fe88d273e00000000000000000000000000000000000000000000000000000000815233600452fd5b50346102b157806003193601126102b157602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b50346102b157806003193601126102b1578060806040516113e981613745565b82815282602082015282604082015282606082015201526040517f5287ce1200000000000000000000000000000000000000000000000000000000815230600482015260a08160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561084f5782916114cd575b60a08265ffffffffffff608060405192805184526020810151151560208501526dffffffffffffffffffffffffffff604082015116604085015263ffffffff60608201511660608501520151166080820152f35b905060a0813d60a011611574575b816114e860a0938361378e565b8101031261082b57604051906114fd82613745565b805182526020810151801515810361157057602083015260408101516dffffffffffffffffffffffffffff8116810361157057604083015260608101519063ffffffff82168203611570576080916060840152015165ffffffffffff81168103610a0f5760a0925060808201525f611479565b8380fd5b3d91506114db565b50346102b157806003193601126102b15773ffffffffffffffffffffffffffffffffffffffff60c954163303611652576115b4613c82565b6115bc613c82565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b807fae3b56d5000000000000000000000000000000000000000000000000000000006024925233600452fd5b50346102b157806003193601126102b157602073ffffffffffffffffffffffffffffffffffffffff60325416604051908152f35b50346102b15760806003193601126102b157600360043510156102b15760243567ffffffffffffffff811161082b576116f160a091369060040161384c565b908092916116fd613c82565b611705613d6e565b8101031261082b5780359073ffffffffffffffffffffffffffffffffffffffff8216809203610a0f5761177e6020820135604083013561177661174b6060860135613f2e565b63ffffffff61176260cc5492828460a01c16613b1c565b9160c01c1690604435906064359085613dd9565b809491613b1c565b8281809411611802575b5050608060405194013584526020840152604083015260608201527f859cffc122e69a171c48ee57adbf5286e1cd0b3ec8e47fef3afd8150e417a069608073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692a380f35b6118986118156118be9361186c93613b58565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8a16602482015260448101919091529182906064820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261378e565b7f0000000000000000000000000000000000000000000000000000000000000000613ffb565b815f611788565b50346102b157806003193601126102b1573373ffffffffffffffffffffffffffffffffffffffff7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005416036119205761191d33613e1f565b80f35b807f118cdaa7000000000000000000000000000000000000000000000000000000006024925233600452fd5b50346102b157806003193601126102b157611965613c16565b7fffffffffffffffffffffffff00000000000000000000000000000000000000007f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0054167f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00558073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346102b157806003193601126102b157602073ffffffffffffffffffffffffffffffffffffffff60cc5416604051908152f35b50346102b15760206003193601126102b157611abe6136dc565b611ac6613c16565b611acf81613cd5565b73ffffffffffffffffffffffffffffffffffffffff8060cc54921691827fffffffffffffffffffffffff000000000000000000000000000000000000000082161760cc55167f204408cda298fb8c78332ddb0d0dad625b7aefbbe05a3be91ae9741d7c7b9ed08380a380f35b50346102b157806003193601126102b157602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b50346102b15760206003193601126102b157611b976136dc565b611b9f613c16565b611ba881613cd5565b73ffffffffffffffffffffffffffffffffffffffff8060c954921691827fffffffffffffffffffffffff000000000000000000000000000000000000000082161760c955167f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a8118380a380f35b50346102b157806003193601126102b15773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003611c8c5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b807fe07c8dba0000000000000000000000000000000000000000000000000000000060049252fd5b50346102b15760606003193601126102b1576004359067ffffffffffffffff82116102b157816004019061012060031984360301126102b157611cf5613c82565b611cfd613d6e565b81359173ffffffffffffffffffffffffffffffffffffffff831680930361082b57828252606560205260ff60408320541661202a5760e4840193611d418583613acb565b603411611570576024013560801c9163ffffffff60cc5460a01c16808410611ffa57506035611d708783613acb565b905011611e66575b50611e5c9450611dcc611dc6611d8c613968565b9260cc549063ffffffff8260c01c169163ffffffff6fffffffffffffffffffffffffffffffff60c4604435940135169160a01c1686613dd9565b90613b1c565b611e196040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201528660248201523060448201528260648201526064815261189860848261378e565b60405194602086015260408501526060840152608083015260243560a083015260a08252611e4860c08361378e565b604051928392604084526040840190613809565b9060208301520390f35b6069611e728783613acb565b905010611fd257610c2773ffffffffffffffffffffffffffffffffffffffff96611e9b92613acb565b9192979097169173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168303611fa657823b15611fa25791611f6497918680946040519a8b95869485937f9fd5a6cf0000000000000000000000000000000000000000000000000000000085528d600486015230602486015260448501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff606485015260a0608485015260a484019161387a565b03925af19485611f8d575b50611e5c94611f8857611f80613b29565b505b5f611d78565b611f82565b611f9884809261378e565b610a0f575f611f6f565b8580fd5b602486847fbf16aab6000000000000000000000000000000000000000000000000000000008252600452fd5b6004847f28d60e11000000000000000000000000000000000000000000000000000000008152fd5b84604491857f5ff4afc1000000000000000000000000000000000000000000000000000000008352600452602452fd5b506024917f27eecc56000000000000000000000000000000000000000000000000000000008252600452fd5b5060406003193601126102b15761206b6136dc565b6024359067ffffffffffffffff8211610a0f5736602383011215610a0f5781600401359083612099836137cf565b936120a7604051958661378e565b83855260208501933660248284010111610a0f578060246020930186378501015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115612366575b5061233e57612117613c16565b73ffffffffffffffffffffffffffffffffffffffff8116926040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481885afa869181612306575b5061219757602486867f4c9c8ce3000000000000000000000000000000000000000000000000000000008252600452fd5b93847f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8796036122db5750823b156122b057908185927fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a280511561227c576122789382915190845af4612272613b29565b91614082565b5080f35b50505050346122885780f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000008552600452602484fd5b7faa1d49a4000000000000000000000000000000000000000000000000000000008652600452602485fd5b9091506020813d602011612336575b816123226020938361378e565b810103126123325751905f612166565b8680fd5b3d9150612315565b6004847fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f61210a565b50346102b157806003193601126102b15773ffffffffffffffffffffffffffffffffffffffff60c954163303611652576123e0613d1a565b6123e8613d1a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a180f35b50346102b157806003193601126102b157602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102b157806003193601126102b157602073ffffffffffffffffffffffffffffffffffffffff60965416604051908152f35b50346102b157806003193601126102b157602063ffffffff60cc5460c01c16604051908152f35b50346102b15760806003193601126102b15761252e6136dc565b6125366136ff565b61253e613722565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16801561295a575b612932577fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000002177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556125ca613fa4565b6125d2613fa4565b6125da613fa4565b6125e2613fa4565b73ffffffffffffffffffffffffffffffffffffffff8316928315612906579061261f73ffffffffffffffffffffffffffffffffffffffff92613e1f565b612627613fa4565b61262f613fa4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005561269d613fa4565b1691603254837fffffffffffffffffffffffff0000000000000000000000000000000000000000821617603255604051937f313ce567000000000000000000000000000000000000000000000000000000008552602085600481845afa80156128fb5774ff00000000000000000000000000000000000000007fffffffffffffffffffffff0000000000000000000000000000000000000000009173ffffffffffffffffffffffffffffffffffffffff9789916128cc575b5060a01b169216171760325560243560c855807fffffffffffffffffffffffff000000000000000000000000000000000000000060c954161760c955807fffffffffffffffffffffffff000000000000000000000000000000000000000060ca54161760ca55807fffffffffffffffffffffffff000000000000000000000000000000000000000060645416176064557fffffffffffffffffffffffff00000000000000000000000000000000000000006096541617609655167fffffffffffffffffffffffff000000000000000000000000000000000000000060cb54161760cb557fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a180f35b6128ee915060203d6020116128f4575b6128e6818361378e565b810190613ab2565b5f612755565b503d6128dc565b6040513d88823e3d90fd5b6024857f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b6004857ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b50600267ffffffffffffffff8216101561256f565b50346102b15760206003193601126102b1576129896136dc565b73ffffffffffffffffffffffffffffffffffffffff60645416330361134a5773ffffffffffffffffffffffffffffffffffffffff1680825260656020526040822060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557ffa4507bc1f9c730e6e95897024f1fe7d576cf2deb53579d55c14f1ac3439e1148280a280f35b50346102b15760a06003193601126102b157612a346136dc565b9060243591612a416136ff565b612a49613722565b906084359163ffffffff83168303612f75577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c168015612f60575b612f38577fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000002177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055612ae6613fa4565b612aee613fa4565b612af6613fa4565b612afe613fa4565b73ffffffffffffffffffffffffffffffffffffffff8416918215612f0c5773ffffffffffffffffffffffffffffffffffffffff90612b3b86613e1f565b612b43613fa4565b612b4b613fa4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330055612bb9613fa4565b1660325490807fffffffffffffffffffffffff00000000000000000000000000000000000000008316176032556040517f313ce567000000000000000000000000000000000000000000000000000000008152602081600481855afa908115612f015774ff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff959493927fffffffffffffffffffffff000000000000000000000000000000000000000000928b91612ee2575b5060a01b1692161717603255827fffffffffffffffffffffffff000000000000000000000000000000000000000060c954161760c955827fffffffffffffffffffffffff000000000000000000000000000000000000000060ca54161760ca55827fffffffffffffffffffffffff00000000000000000000000000000000000000006064541617606455827fffffffffffffffffffffffff00000000000000000000000000000000000000006096541617609655167fffffffffffffffffffffffff000000000000000000000000000000000000000060cb54161760cb557ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054927fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1600367ffffffffffffffff8516101561293257612dbc90613cd5565b60cc549163ffffffff8611612eb157918577ffffffff0000000000000000000000000000000000000000600395937fffffffff000000000000000000000000000000000000000000000000000000007bffffffff0000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000009760c01b169416179160a01b16171760cc558360c85516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160038152a180f35b604485877f6dfcc6500000000000000000000000000000000000000000000000000000000082526020600452602452fd5b612efb915060203d6020116128f4576128e6818361378e565b5f612c74565b6040513d8a823e3d90fd5b6024867f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b6004867ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b50600267ffffffffffffffff82161015612a8b565b8480fd5b50346102b157806003193601126102b157602073ffffffffffffffffffffffffffffffffffffffff60ca5416604051908152f35b50346102b15760206003193601126102b15773ffffffffffffffffffffffffffffffffffffffff612fdc6136dc565b612fe4613c16565b1680156130535773ffffffffffffffffffffffffffffffffffffffff609654827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617609655167fd4be30df1957cf936f62b93306f02b3560f103d86ae279b3b762660525b2a1a18380a380f35b6004827fad3ff4af000000000000000000000000000000000000000000000000000000008152fd5b50346102b15760406003193601126102b1576130956136dc565b906024359173ffffffffffffffffffffffffffffffffffffffff6096541633036131505773ffffffffffffffffffffffffffffffffffffffff16807fa07a7c96cc7406722ea78961a08db3748f6d383d3add2983880f56deb26ccf4a6020604051868152a2824710613120578180809481935af1613111613b29565b901561311b575080f35b613f6d565b50604491477fcf479181000000000000000000000000000000000000000000000000000000008352600452602452fd5b6024827fc7a3e88000000000000000000000000000000000000000000000000000000000815233600452fd5b50346102b15760206003193601126102b15773ffffffffffffffffffffffffffffffffffffffff6131ab6136dc565b6131b3613c16565b1680156132d05760325490807fffffffffffffffffffffffff0000000000000000000000000000000000000000831617603255604051917f313ce567000000000000000000000000000000000000000000000000000000008352602083600481855afa9182156108985774ff00000000000000000000000000000000000000006040937f05cd89403c6bdeac21c2ff33de395121a31fa1bc2bf3adf4825f1f86e79969dd9587916132b1575b5060a01b16817fffffffffffffffffffffff0000000000000000000000000000000000000000008416171760325573ffffffffffffffffffffffffffffffffffffffff8351921682526020820152a180f35b6132ca915060203d6020116128f4576128e6818361378e565b5f61325f565b6004827f9589a27d000000000000000000000000000000000000000000000000000000008152fd5b50346102b157806003193601126102b157602063ffffffff60cc5460a01c16604051908152f35b50346102b15760206003193601126102b1577f1fca64d7446786f5677354297df83564e464388bce22eba6dc9a112e2ec103da63ffffffff61335f6136c9565b613367613c16565b610ba860cc549177ffffffff00000000000000000000000000000000000000008160a01b167fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff84161760cc5560405193849360a01c168390929163ffffffff60209181604085019616845216910152565b50346102b15760406003193601126102b1576133f26136dc565b906024359163ffffffff8316830361082b577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549060ff8260401c168015613579575b6135515761344281613cd5565b60cc5460c8549463ffffffff8611612eb157918577ffffffff0000000000000000000000000000000000000000600395937fffffffff0000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff7bffffffff0000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000009860c01b1695169116179160a01b16171760cc558360c85516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160038152a180f35b6004837ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b50600367ffffffffffffffff83161015613435565b50346102b157806003193601126102b157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102b157806003193601126102b15760206135fa613968565b604051908152f35b50602060031936011261088c576136176136c9565b61361f613c16565b613627613c82565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b1561088c5763ffffffff60245f9260405194859384927f0396cb6000000000000000000000000000000000000000000000000000000000845216600483015234905af180156136be576136b2575080f35b61001891505f9061378e565b6040513d5f823e3d90fd5b6004359063ffffffff8216820361088c57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361088c57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361088c57565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361088c57565b60a0810190811067ffffffffffffffff82111761376157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761376157604052565b67ffffffffffffffff811161376157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9181601f8401121561088c5782359167ffffffffffffffff831161088c576020838186019501011161088c57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b519069ffffffffffffffffffff8216820361088c57565b9060ff8091169116039060ff82116138e357565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b604d81116138e357600a0a90565b818102929181159184041417156138e357565b811561393b570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b603254604051907ffeaf968c00000000000000000000000000000000000000000000000000000000825260a08260048173ffffffffffffffffffffffffffffffffffffffff85165afa9182156136be575f92613a63575b505f821315613a375760ff9060a01c16907f00000000000000000000000000000000000000000000000000000000000000009160ff831681115f14613a1f5760ff613a10613a1c94613a16936138cf565b16613910565b90613931565b90565b60ff613a10613a3192613a1c956138cf565b9061391e565b507f833563e4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90915060a0813d60a011613aaa575b81613a7f60a0938361378e565b8101031261088c57613a90816138b8565b50613aa26080602083015192016138b8565b50905f6139bf565b3d9150613a72565b9081602091031261088c575160ff8116810361088c5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561088c570180359067ffffffffffffffff821161088c5760200191813603831361088c57565b919082018092116138e357565b3d15613b53573d90613b3a826137cf565b91613b48604051938461378e565b82523d5f602084013e565b606090565b919082039182116138e357565b9093929384831161088c57841161088c578101920390565b909160499280841161088c576035830135926069851161088c578160691161088c57808501359460690360208110613be1575b5081606973ffffffffffffffffffffffffffffffffffffffff9493613bd493613b65565b92909360601c1693929190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b9094169381613bb0565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303613c5657565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416613cad57565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff1615613cf257565b7fe6c4247b000000000000000000000000000000000000000000000000000000005f5260045ffd5b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300541615613d4657565b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303613dad57565b7f400b7ae7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b90670de0b6b3a764000093613df7613e0194613dfc9398979861391e565b613b1c565b61391e565b0491600183018093116138e357613e1b612710918461391e565b0490565b7fffffffffffffffffffffffff00000000000000000000000000000000000000007f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0054167f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005573ffffffffffffffffffffffffffffffffffffffff807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054921691827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b619c40811115613f6857613f4e9063ffffffff60cc5460a01c1690613b58565b600a810290808204600a14901517156138e3576064900490565b505f90565b805115613f7c57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615613fd357565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f602091828151910182855af1156136be575f513d614079575073ffffffffffffffffffffffffffffffffffffffff81163b155b6140375750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415614030565b9061408d5750613f6d565b815115806140e0575b61409e575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561409656fea2646970667358221220a2bfa8c0ddd5b5a1ac4a7962facdd492c36989d3741e8022e7ad727da2dac97364736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a000000000000000000000000004337084d9e255ff0702461cf8895ce9e3b5ff108000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e583100000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1