@uniswap/universal-router
Version:
Smart contracts for Universal Router
1 lines • 253 kB
JSON
{"abi":[{"type":"constructor","inputs":[{"name":"initialOwner","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"balance","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"clear","inputs":[{"name":"currency","type":"address","internalType":"Currency"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"collectProtocolFees","inputs":[{"name":"recipient","type":"address","internalType":"address"},{"name":"currency","type":"address","internalType":"Currency"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"amountCollected","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"donate","inputs":[{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"amount0","type":"uint256","internalType":"uint256"},{"name":"amount1","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"delta","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"extsload","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"extsload","inputs":[{"name":"startSlot","type":"bytes32","internalType":"bytes32"},{"name":"nSlots","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"extsload","inputs":[{"name":"slots","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"exttload","inputs":[{"name":"slots","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"exttload","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[{"name":"tick","type":"int24","internalType":"int24"}],"stateMutability":"nonpayable"},{"type":"function","name":"isOperator","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"isOperator","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"mint","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"modifyLiquidity","inputs":[{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct IPoolManager.ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"callerDelta","type":"int256","internalType":"BalanceDelta"},{"name":"feesAccrued","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"protocolFeeController","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"protocolFeesAccrued","inputs":[{"name":"currency","type":"address","internalType":"Currency"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setOperator","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"approved","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"setProtocolFee","inputs":[{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"newProtocolFee","type":"uint24","internalType":"uint24"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setProtocolFeeController","inputs":[{"name":"controller","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"settle","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"settleFor","inputs":[{"name":"recipient","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"swap","inputs":[{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct IPoolManager.SwapParams","components":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"swapDelta","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"sync","inputs":[{"name":"currency","type":"address","internalType":"Currency"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"take","inputs":[{"name":"currency","type":"address","internalType":"Currency"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transfer","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"receiver","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unlock","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"result","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"updateDynamicLPFee","inputs":[{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"newDynamicLPFee","type":"uint24","internalType":"uint24"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Donate","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount1","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialize","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"currency0","type":"address","indexed":true,"internalType":"Currency"},{"name":"currency1","type":"address","indexed":true,"internalType":"Currency"},{"name":"fee","type":"uint24","indexed":false,"internalType":"uint24"},{"name":"tickSpacing","type":"int24","indexed":false,"internalType":"int24"},{"name":"hooks","type":"address","indexed":false,"internalType":"contract IHooks"},{"name":"sqrtPriceX96","type":"uint160","indexed":false,"internalType":"uint160"},{"name":"tick","type":"int24","indexed":false,"internalType":"int24"}],"anonymous":false},{"type":"event","name":"ModifyLiquidity","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"tickLower","type":"int24","indexed":false,"internalType":"int24"},{"name":"tickUpper","type":"int24","indexed":false,"internalType":"int24"},{"name":"liquidityDelta","type":"int256","indexed":false,"internalType":"int256"},{"name":"salt","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"OperatorSet","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProtocolFeeControllerUpdated","inputs":[{"name":"protocolFeeController","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProtocolFeeUpdated","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"protocolFee","type":"uint24","indexed":false,"internalType":"uint24"}],"anonymous":false},{"type":"event","name":"Swap","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0","type":"int128","indexed":false,"internalType":"int128"},{"name":"amount1","type":"int128","indexed":false,"internalType":"int128"},{"name":"sqrtPriceX96","type":"uint160","indexed":false,"internalType":"uint160"},{"name":"liquidity","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"tick","type":"int24","indexed":false,"internalType":"int24"},{"name":"fee","type":"uint24","indexed":false,"internalType":"uint24"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"caller","type":"address","indexed":false,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AlreadyUnlocked","inputs":[]},{"type":"error","name":"CurrenciesOutOfOrderOrEqual","inputs":[{"name":"currency0","type":"address","internalType":"address"},{"name":"currency1","type":"address","internalType":"address"}]},{"type":"error","name":"CurrencyNotSettled","inputs":[]},{"type":"error","name":"DelegateCallNotAllowed","inputs":[]},{"type":"error","name":"InvalidCaller","inputs":[]},{"type":"error","name":"ManagerLocked","inputs":[]},{"type":"error","name":"MustClearExactPositiveDelta","inputs":[]},{"type":"error","name":"NonzeroNativeValue","inputs":[]},{"type":"error","name":"PoolNotInitialized","inputs":[]},{"type":"error","name":"ProtocolFeeCurrencySynced","inputs":[]},{"type":"error","name":"ProtocolFeeTooLarge","inputs":[{"name":"fee","type":"uint24","internalType":"uint24"}]},{"type":"error","name":"SwapAmountCannotBeZero","inputs":[]},{"type":"error","name":"TickSpacingTooLarge","inputs":[{"name":"tickSpacing","type":"int24","internalType":"int24"}]},{"type":"error","name":"TickSpacingTooSmall","inputs":[{"name":"tickSpacing","type":"int24","internalType":"int24"}]},{"type":"error","name":"UnauthorizedDynamicLPFeeUpdate","inputs":[]}],"bytecode":{"object":"0x60a03460a057601f615b2738819003918201601f19168301916001600160401b0383118484101760a45780849260209460405283398101031260a057516001600160a01b0381169081900360a0575f80546001600160a01b0319168217815560405191907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a330608052615a6e90816100b98239608051816131a20152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60a0806040526004361015610012575f80fd5b5f3560e01c908162fdd58e146129c95750806301ffc9a714612928578063095bcdb61461287e5780630b0d9c091461281057806311da60b4146127d3578063156e29f6146127235780631e2eaeaf14612707578063234266d7146124865780632d771389146123f957806335fd631a146123a35780633dd45adb1461235d578063426a8493146122d957806348c894911461206c5780635275965114611f72578063558a729714611eb9578063598af9e714611e3f5780635a6bcfda146112c95780636276cbbe14610e2e5780637e87ce7d14610d0f57806380f0b44c14610c5b5780638161b87414610b235780638da5cb5b14610af157806397e8cd4e14610aac5780639bf6645f14610a5f578063a5841194146109b2578063b6363cf21461093f578063dbd035ff146108e9578063f02de3b2146108b6578063f135baaa1461089a578063f2fde38b1461080c578063f3cd914c146104e1578063f5298aca146103165763fe99049a14610186575f80fd5b346103125760806003193601126103125761019f612a15565b6101a7612a38565b90604435917f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac72885961025b73ffffffffffffffffffffffffffffffffffffffff8060643595169384331415806102ef575b610269575b845f52600460205260405f20875f5260205260405f2061021c878254612c69565b90551693845f52600460205260405f20865f5260205260405f20610241828254612c76565b905560408051338152602081019290925290918291820190565b0390a4602060405160018152f35b845f52600560205260405f208233165f5260205260405f20875f5260205260405f2054867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036102bc575b50506101fb565b6102c591612c69565b855f52600560205260405f208333165f5260205260405f20885f5260205260405f20555f866102b5565b50845f52600360205260405f208233165f5260205260ff60405f205416156101f6565b5f80fd5b346103125761032436612a5b565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104b9577f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac7288596103cf73ffffffffffffffffffffffffffffffffffffffff805f95169561039d61039586612d26565b339089612d6c565b16923384141580610482575b6103d4575b83855260046020526040852086865260205260408520610241828254612c69565b0390a4005b83855260056020526040852073ffffffffffffffffffffffffffffffffffffffff33168652602052604085208686526020526040852054817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361043b575b50506103ae565b61044491612c69565b84865260056020526040862073ffffffffffffffffffffffffffffffffffffffff331687526020526040862087875260205260408620558681610434565b5083855260036020526040852073ffffffffffffffffffffffffffffffffffffffff3316865260205260ff604086205416156103a9565b7f54e3ca0d000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461031257610120600319360112610312576104fc36612b39565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c360112610312576040519061053382612aae565b60a4358015158103610312578252602082019060c435825260e4359073ffffffffffffffffffffffffffffffffffffffff8216820361031257604084019182526101043567ffffffffffffffff811161031257610594903690600401612be7565b9290937fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104b9576105c661318b565b51156107e45760a0822092835f52600660205260405f20906105e7826131f2565b60808401958482828a8a5173ffffffffffffffffffffffffffffffffffffffff1693610612946137c0565b90949195606088015160020b908b511515905173ffffffffffffffffffffffffffffffffffffffff1691604051986106498a612aca565b895260208901526040880152606087015262ffffff166080860152885115155f149862ffffff6107669861069f6107539860209d6107c45773ffffffffffffffffffffffffffffffffffffffff8b5116956145d5565b949296829192610797575b505073ffffffffffffffffffffffffffffffffffffffff845116938e6fffffffffffffffffffffffffffffffff60408301511691015160020b90604051958860801d600f0b875288600f0b60208801526040870152606086015260808501521660a08301527f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f60c03393a38673ffffffffffffffffffffffffffffffffffffffff8a51166139fd565b8094919461076e575b50508233916132ce565b604051908152f35b73ffffffffffffffffffffffffffffffffffffffff61079092511690836132ce565b848061075c565b73ffffffffffffffffffffffffffffffffffffffff165f5260018f5260405f209081540190558e806106aa565b73ffffffffffffffffffffffffffffffffffffffff8e8c015116956145d5565b7fbe8b8507000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610312576020600319360112610312577fffffffffffffffffffffffff0000000000000000000000000000000000000000610846612a15565b73ffffffffffffffffffffffffffffffffffffffff5f549161086b8284163314612c83565b1691829116175f55337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b34610312576020600319360112610312576004355c5f5260205ff35b34610312575f60031936011261031257602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b34610312576108f736612c15565b6040519160408360208152836020820152019160051b8301916020806040850193925b833554815201910190848382101561093657506020809161091a565b60408186030190f35b3461031257604060031936011261031257610958612a15565b73ffffffffffffffffffffffffffffffffffffffff610975612a38565b91165f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060ff60405f2054166040519015158152f35b34610312576020600319360112610312576109cb612a15565b73ffffffffffffffffffffffffffffffffffffffff81169081610a0f5750505f7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d005b610a189061370e565b907f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955d005b3461031257610a6d36612c15565b6040519160408360208152836020820152019160051b8301916020806040850193925b83355c8152019101908483821015610936575060208091610a90565b346103125760206003193601126103125773ffffffffffffffffffffffffffffffffffffffff610ada612a15565b165f526001602052602060405f2054604051908152f35b34610312575f60031936011261031257602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461031257606060031936011261031257610b3c612a15565b610b44612a38565b60443573ffffffffffffffffffffffffffffffffffffffff600254163303610c335773ffffffffffffffffffffffffffffffffffffffff821680151580610bf3575b610bcb576020936107669280610bc35750815f526001855260405f20549384925b5f526001865260405f20610bbc848254612c69565b9055612e74565b938492610ba7565b7fc79e5948000000000000000000000000000000000000000000000000000000005f5260045ffd5b508073ffffffffffffffffffffffffffffffffffffffff7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95c1614610b86565b7f48f5c3ed000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461031257604060031936011261031257610c74612a15565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104b957335f90815273ffffffffffffffffffffffffffffffffffffffff8216602052604090205c610cca602435612d26565b9081600f0b03610ce757610ce59133915f03600f0b90612d6c565b005b7fbda73abf000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103125760c060031936011261031257610d2936612b39565b610d31612b27565b9073ffffffffffffffffffffffffffffffffffffffff600254163303610c3357623e900062fff0008316106103e9610fff8416101615610dfd57602060a07fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f9922092835f526006825260405f20610da7816131f2565b805479ffffff00000000000000000000000000000000000000000000008360b81b16907fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff1617905562ffffff60405191168152a2005b62ffffff827fa7abe2f7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b346103125760c060031936011261031257610e4836612b39565b60a4359073ffffffffffffffffffffffffffffffffffffffff821680830361031257610e7261318b565b6060820191825160020b617fff811361129e5750825160020b60018112611273575073ffffffffffffffffffffffffffffffffffffffff815116602082019073ffffffffffffffffffffffffffffffffffffffff8251168082101561123c575050608082019073ffffffffffffffffffffffffffffffffffffffff825116906040840191610f0662ffffff84511682613633565b156112115750610f1b62ffffff8351166136f1565b96835173ffffffffffffffffffffffffffffffffffffffff81169081330361115a575b505060a0852090815f52600660205260405f2090815473ffffffffffffffffffffffffffffffffffffffff16611132576020997fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d6438927cffffff0000000000000000000000000000000000000000000000000000610fbc60a094614278565b9260d01b168a76ffffff000000000000000000000000000000000000000084861b161717905562ffffff73ffffffffffffffffffffffffffffffffffffffff808a5116965116965116995160020b73ffffffffffffffffffffffffffffffffffffffff885116906040519b8c528c8c015260408b01528860608b015260020b98896080820152a45173ffffffffffffffffffffffffffffffffffffffff81169081330361106e575b8585604051908152f35b6110001661107d575b80611064565b61112992611107604051937f6fe7e6eb0000000000000000000000000000000000000000000000000000000088860152336024860152604485019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60e483015283610104830152610104825261112461012483612ae6565b613ba1565b50828080611077565b7f7983c051000000000000000000000000000000000000000000000000000000005f5260045ffd5b61200016611169575b80610f3e565b61120a90604051907fdc98354e0000000000000000000000000000000000000000000000000000000060208301523360248301526111f4604483018973ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8860e483015260e4825261112461010483612ae6565b5088611163565b7fe65af6a0000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60449250604051917f6e6c983000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b7fe9e90588000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb70024f8000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b3461031257610140600319360112610312576112e436612b39565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c360112610312576040519061131b82612a92565b60a4358060020b810361031257825260c4358060020b810361031257602083015260e43560408301526101043560608301526101243567ffffffffffffffff81116103125761136e903690600401612be7565b90927fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104b95761139f61318b565b60a0832093845f52600660205260405f206080526113be6080516131f2565b608084015173ffffffffffffffffffffffffffffffffffffffff811690813303611d3a575b5050815160020b92602083015160020b916114016040850151613401565b93606087015160020b9760608201516040519960c08b018b811067ffffffffffffffff821117611d0d57604052338b528860208c01528660408c015287600f0b60608c015260808b015260a08a01525f9185881215611cd6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276188812611caa57620d89e88613611c7e576040519261149884612a92565b5f84525f60208501525f60408501525f606085015287600f0b611981575b600460805101978960020b5f528860205260405f20988860020b5f5260205260405f206080515460a01c60020b8b81125f1461192b575060028060018c0154600184015490039b015491015490039b5b60a073ffffffffffffffffffffffffffffffffffffffff825116910151906040519160268301528960068301528b600383015281525f603a600c83012091816040820152816020820152525f5260066080510160205260405f20976fffffffffffffffffffffffffffffffff8954169982600f0b155f146118ce578a156118a6576115cb6115c560409f9b6116aa9c6116bc9e5b60018301956115bd60026115b1848a54850361537f565b9501928354850361537f565b965555612d26565b91612d26565b6fffffffffffffffffffffffffffffffff169060801b179a8b965f84600f0b12611838575b5082600f0b6116f4575b5050506116206116118560801d8360801d01613401565b9185600f0b90600f0b01613401565b6fffffffffffffffffffffffffffffffff169060801b1791815160020b90602083015160020b8c8401516060850151918e5194855260208501528d84015260608301527ff208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec60803393a38873ffffffffffffffffffffffffffffffffffffffff6080820151166134d7565b809491946116c8575b508333916132ce565b82519182526020820152f35b6116ee9073ffffffffffffffffffffffffffffffffffffffff60808401511690836132ce565b856116b3565b60805154929350909173ffffffffffffffffffffffffffffffffffffffff81169060a01c60020b8281121561175a5750509061174e9261174361173961174994613dd4565b91600f0b92613dd4565b906141a3565b613401565b60801b5b8b80806115fa565b92809193125f1461180557611799916117866117496117499361178088600f0b91613dd4565b876141a3565b9361179486600f0b92613dd4565b614146565b6fffffffffffffffffffffffffffffffff169060801b17906fffffffffffffffffffffffffffffffff6117d860036080510192600f0b828454166141ea565b167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055611752565b9061174992509261181b61173961182195613dd4565b90614146565b6fffffffffffffffffffffffffffffffff16611752565b808f915161187a575b015161184e575b8e6115f0565b6118758260805160049160020b5f52016020525f6002604082208281558260018201550155565b611848565b6118a18360805160049160020b5f52016020525f6002604082208281558260018201550155565b611841565b7faefeb924000000000000000000000000000000000000000000000000000000005f5260045ffd5b6115cb6115c560409f9b6116aa9c6116bc9e6fffffffffffffffffffffffffffffffff6118fe89600f0b836141ea565b167fffffffffffffffffffffffffffffffff0000000000000000000000000000000084541617835561159a565b90999089136119515760028060018c0154600184015490039b015491015490039b611506565b9860026001608051015460018c01549003600183015490039a81806080510154910154900391015490039b611506565b6004608051018960020b5f5280602052898960405f206119da81546fffffffffffffffffffffffffffffffff6119bd81831695600f0b866141ea565b16931594858515141595611c4a575b508d600f0b9060801d6139b6565b60801b82179055602087015285528760020b5f5260205260405f208054906fffffffffffffffffffffffffffffffff8216611a188b600f0b826141ea565b901592836fffffffffffffffffffffffffffffffff831615141593611c1d575b8b600f0b9060801d600f0b03916f7fffffffffffffffffffffffffffffff83137fffffffffffffffffffffffffffffffff80000000000000000000000000000000841217611bf057826fffffffffffffffffffffffffffffffff935060801b83831617905516606086015260408501525f88600f0b1215611afd575b8351611ae1575b6040840151156114b657611adc60808c015160020b88600560805101613d88565b6114b6565b611af860808c015160020b8a600560805101613d88565b611abb565b60808b015160020b6fffffffffffffffffffffffffffffffff600181602088015116925f817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180712817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618050390620d89e8050301810416809111611bc4576fffffffffffffffffffffffffffffffff6060860151161115611ab457867fb8e3c385000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b897fb8e3c385000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6080515460a01c60020b8b13611a3857600160805101546001840155600260805101546002840155611a38565b6080515460a01c60020b1215611c61575b8e6119cc565b600160805101546001840155600260805101546002840155611c5b565b857f1ad777f8000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b877fd5e2f7ab000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60448887604051917fc4433ed500000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f604085015113808091611e32575b15611dc75750506040517f259982e5000000000000000000000000000000000000000000000000000000006020820152611dbe9161112482611d928887898c3360248701613347565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283612ae6565b505b85806113e3565b159081611e24575b50611ddb575b50611dc0565b6040517f21d0ee70000000000000000000000000000000000000000000000000000000006020820152611e1d9161112482611d928887898c3360248701613347565b5085611dd5565b610200915016151587611dcf565b5061080082161515611d49565b3461031257606060031936011261031257611e58612a15565b73ffffffffffffffffffffffffffffffffffffffff611e75612a38565b91165f52600560205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f5260205260405f206044355f52602052602060405f2054604051908152f35b3461031257604060031936011261031257611ed2612a15565b602435908115158092036103125773ffffffffffffffffffffffffffffffffffffffff90335f52600360205260405f208282165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff851617905560405192835216907fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa26760203392a3602060405160018152f35b346103125760c060031936011261031257611f8c36612b39565b611f94612b27565b906280000062ffffff60408301511614801590612048575b6120205760a090611fbc8361330a565b205f52600660205260405f2090611fd2826131f2565b81547fffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffff1660d09190911b7cffffff000000000000000000000000000000000000000000000000000016179055005b7f30d21641000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff608082015116331415611fac565b346103125760206003193601126103125760043567ffffffffffffffff81116103125761209d903690600401612be7565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c6122b157612129915f9160017fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235d60405193849283927f91dd7346000000000000000000000000000000000000000000000000000000008452602060048501526024840191612ce8565b038183335af19081156122a6575f916121fe575b507f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c6121d65760406020915f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f835194859381855280519182918282880152018686015e5f85828601015201168101030190f35b7f5212cba1000000000000000000000000000000000000000000000000000000005f5260045ffd5b90503d805f833e61220f8183612ae6565b8101906020818303126103125780519067ffffffffffffffff8211610312570181601f820112156103125780519067ffffffffffffffff8211611d0d576040519261228260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185612ae6565b8284526020838301011161031257815f9260208093018386015e830101528161213d565b6040513d5f823e3d90fd5b7f5090d6c6000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103125773ffffffffffffffffffffffffffffffffffffffff6122fc36612a5b565b91929092335f52600560205260405f208282165f5260205260405f20845f526020528260405f205560405192835216907fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a760203392a4602060405160018152f35b602060031936011261031257612371612a15565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104b9576107666020916130a9565b34610312576040600319360112610312576024356004356040519160408360208152826020820152019060051b8301916001602060408501935b83548152019101908483821015610936575060206001916123dd565b346103125760206003193601126103125773ffffffffffffffffffffffffffffffffffffffff612427612a15565b612435825f54163314612c83565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc5f80a2005b3461031257610100600319360112610312576124a136612b39565b60c4359060a43560e43567ffffffffffffffff8111610312576124c8903690600401612be7565b9190937fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104b9576124fa61318b565b60a0842094855f52600660205260405f2094612515866131f2565b60808101805173ffffffffffffffffffffffffffffffffffffffff8116908133036126af575b50506fffffffffffffffffffffffffffffffff6003880154169788156126875760209861256787612d26565b5f0361257287612d26565b5f036fffffffffffffffffffffffffffffffff169060801b179887612673575b8661265e575b50506125a53389856132ce565b60405190868252858a8301527f29ef05caaff9404b7cb6d1c0e9bbae9eaa7ab2541feba1a9c4248594c08156cb60403393a3519273ffffffffffffffffffffffffffffffffffffffff841693843303612603575b8888604051908152f35b601016612611575b806125f9565b6126529561112493611d92926040519788957fe1b4af69000000000000000000000000000000000000000000000000000000008d8801523360248801613238565b5082808080808061260b565b600201908660801b0481540190558980612598565b60018101828960801b048154019055612592565b7fa74f97ab000000000000000000000000000000000000000000000000000000005f5260045ffd5b6020166126bd575b8061253b565b6040517fb6a8b0fa0000000000000000000000000000000000000000000000000000000060208201526127009161112482611d928b898b8d8b3360248801613238565b50886126b7565b3461031257602060031936011261031257600435545f5260205ff35b346103125761273136612a5b565b907fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104b9577f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac7288596103cf73ffffffffffffffffffffffffffffffffffffffff805f9416956127b06127a387612d26565b8603600f0b339089612d6c565b169384845260046020526040842086855260205260408420610241828254612c76565b5f600319360112610312577fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104b9576020610766336130a9565b3461031257606060031936011261031257612829612a15565b612831612a38565b604435907fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c156104b957610ce59261287961286c84612d26565b5f03600f0b339083612d6c565b612e74565b346103125773ffffffffffffffffffffffffffffffffffffffff6128a136612a5b565b91929092335f52600460205260405f20845f5260205260405f206128c6848254612c69565b90551690815f52600460205260405f20835f5260205260405f206128eb828254612c76565b9055604080513380825260208201939093527f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859918190810161025b565b34610312576020600319360112610312576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361031257807f01ffc9a7000000000000000000000000000000000000000000000000000000006020921490811561299f575b506040519015158152f35b7f0f632fb30000000000000000000000000000000000000000000000000000000091501482612994565b346103125760406003193601126103125760209073ffffffffffffffffffffffffffffffffffffffff6129fa612a15565b165f526004825260405f206024355f52825260405f20548152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361031257565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361031257565b60031960609101126103125760043573ffffffffffffffffffffffffffffffffffffffff8116810361031257906024359060443590565b6080810190811067ffffffffffffffff821117611d0d57604052565b6060810190811067ffffffffffffffff821117611d0d57604052565b60a0810190811067ffffffffffffffff821117611d0d57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611d0d57604052565b60a4359062ffffff8216820361031257565b60031960a09101126103125760405190612b5282612aca565b8160043573ffffffffffffffffffffffffffffffffffffffff8116810361031257815260243573ffffffffffffffffffffffffffffffffffffffff8116810361031257602082015260443562ffffff811681036103125760408201526064358060020b81036103125760608201526084359073ffffffffffffffffffffffffffffffffffffffff821682036103125760800152565b9181601f840112156103125782359167ffffffffffffffff8311610312576020838186019501011161031257565b9060206003198301126103125760043567ffffffffffffffff811161031257826023820112156103125780600401359267ffffffffffffffff84116103125760248460051b83010111610312576024019190565b91908203918211611bf057565b91908201809211611bf057565b15612c8a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152fd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b6f80000000000000000000000000000000811015612d4457600f0b90565b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190600f0b918215612e6f57612da2919073ffffffffffffffffffffffffffffffffffffffff8092165f521660205260405f2090565b612dae815c92836137a5565b80915d612e1f57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c017f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5d5b565b15612e2657565b60017f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c017f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5d565b505050565b90919073ffffffffffffffffffffffffffffffffffffffff81169081612f665750505f80808093855af115612ea65750565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011673ffffffffffffffffffffffffffffffffffffffff604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301525f6024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff4b3b1bc0000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b60205f60448194968260409573ffffffffffffffffffffffffffffffffffffffff988751998a947fa9059cbb00000000000000000000000000000000000000000000000000000000865216600485015260248401525af13d15601f3d11600185511416171692828152826020820152015215612fdf5750565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d0116604051917f90bfb86500000000000000000000000000000000000000000000000000000000835260048301527fa9059cbb000000000000000000000000000000000000000000000000000000006024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95c919073ffffffffffffffffffffffffffffffffffffffff83166130fe57612e1d9034935b6130f885612d26565b90612d6c565b3461316357612e1d9061313a7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955c6131358661370e565b612c69565b935f7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d6130ef565b7fb0ec849e000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036131ca57565b7f0d89438e000000000000000000000000000000000000000000000000000000005f5260045ffd5b5473ffffffffffffffffffffffffffffffffffffffff161561321057565b7f486aa307000000000000000000000000000000000000000000000000000000005f5260045ffd5b91926132b36101209473ffffffffffffffffffffffffffffffffffffffff6132cb999794168552602085019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60c083015260e0820152816101008201520191612ce8565b90565b9073ffffffffffffffffffffffffffffffffffffffff6020612e1d94936132fd85848351168660801d90612d6c565b01511690600f0b90612d6c565b62ffffff16620f4240811161331c5750565b7f14002113000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b906132cb95936133c46101609473ffffffffffffffffffffffffffffffffffffffff6133f394168552602085019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051600290810b60c08501526020820151900b60e0840152604081015161010084015260600151610120830152565b816101408201520191612ce8565b9081600f0b918203612d4457565b926134bd9061348e6132cb99979473ffffffffffffffffffffffffffffffffffffffff6101a09895168752602087019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051600290810b60c08701526020820151900b60e0860152604081015161010086015260600151610120850152565b610140830152610160820152816101808201520191612ce8565b939590919296945f9673ffffffffffffffffffffffffffffffffffffffff8616331461362857885f6040870151135f146135b757610400871661351e575b50505050505050565b6135aa97999850926135a39695949261356b92613597956040519788967f9f063efc000000000000000000000000000000000000000000000000000000006020890152336024890161340f565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612ae6565b6002821615159161421b565b809261423b565b915f808080808080613515565b95949392919061010086166135cf5750505050505050565b6135aa9799508698509161356b9161361c94936135a3986040519788967f6c2bbe7e000000000000000000000000000000000000000000000000000000006020890152336024890161340f565b6001821615159161421b565b505f96505050505050565b6080811615806136e5575b6136bb576040811615806136d9575b6136bb57610400811615806136cd575b6136bb57610100811615806136c1575b6136bb5773ffffffffffffffffffffffffffffffffffffffff811661369b575062ffffff1662800000141590565b613fff1615908115916136ac575090565b62800000915062ffffff161490565b50505f90565b5060018116151561366d565b5060028116151561365d565b5060048116151561364d565b5060088116151561363e565b6280000062ffffff821614613709576132cb8161330a565b505f90565b73ffffffffffffffffffffffffffffffffffffffff168061372e57504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9081156122a6575f91613776575090565b90506020813d60201161379d575b8161379160209383612ae6565b81010312610312575190565b3d9150613784565b9190915f8382019384129112908015821691151617611bf057565b6020830151955f9586959194913373ffffffffffffffffffffffffffffffffffffffff8516146139a957608084166137fa575b5050505050565b6138e29261356b6138dc926138c8946040519586947f575e24b4000000000000000000000000000000000000000000000000000000006020870152336024870152613892604487018c73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051151560e487015260208101516101048701526040015173ffffffffffffffffffffffffffffffffffffffff16610124860152565b610140610144850152610164840191612ce8565b82613ba1565b916060835103613981576040015162ffffff166280000014613975575b600816613910575b808080806137f3565b604001519250608083901d600f0b801561390757613931905f8612956137a5565b931561396d575f84135b613945575f613907565b7ffa0b71d6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f841261393b565b606082015193506138ff565b7f1e048e1d000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f965086955050505050565b90600f0b90600f0b01907fffffffffffffffffffffffffffffffff8000000000000000000000000000000082126f7fffffffffffffffffffffffffffffff831317611bf057565b9196959394929473ffffffffffffffffffffffffffffffffffffffff83163314613b94578460801d94600f0b938860408516613abc575b50505050505f9481600f0b15801590613ab0575b613a54575b5050509190565b613a8b9395505f60208201511290511515145f14613a93576fffffffffffffffffffffffffffffffff169060801b175b809361423b565b5f8080613a4d565b906fffffffffffffffffffffffffffffffff169060801b17613a84565b5082600f0b1515613a48565b613b78613b849461356b61174995613b8a999895613b5d613892966040519788967fb47b2fb1000000000000000000000000000000000000000000000000000000006020890152336024890152604488019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8c610144850152610160610164850152610184840191612ce8565b6004821615159161421b565b906139b6565b5f80808088613a34565b5050505050909150905f90565b9190918251925f8060208301958682865af115613c3f575050604051917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f3d011683016040523d83523d9060208401915f833e6020845110918215613c0b575b505061398157565b5190517fffffffff000000000000000000000000000000000000000000000000000000009182169116141590505f80613c03565b5183517fffffffff0000000000000000000000000000000000000000000000000000000081169160048110613d53575b50507fffffffff000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d01169173ffffffffffffffffffffffffffffffffffffffff604051947f90bfb865000000000000000000000000000000000000000000000000000000008652166004850152166024830152608060448301528060a00160648301523d60848301523d5f60a484013e7fa9e35b2f0000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7fffffffff000000000000000000000000000000000000000000000000000000009250829060040360031b1b16168280613c6f565b919060020b9060020b90818107613db65705908160081d5f52602052600160ff60405f2092161b8154189055565b601c906044926040519163d4d8f3e683526020830152604082015201fd5b60020b908160ff1d82810118620d89e8811161411a5763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a594001027001000000000000000000000000000000001891600281166140fe575b600481166140e2575b600881166140c6575b601081166140aa575b6020811661408e575b60408116614072575b60808116614056575b610100811661403a575b610200811661401e575b6104008116614002575b6108008116613fe6575b6110008116613fca575b6120008116613fae575b6140008116613f92575b6180008116613f76575b620100008116613f5a575b620200008116613f3f575b620400008116613f24575b6208000016613f0b575b5f12613ee4575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04613edd565b6b048a170391f7dc42444e8fa290910260801c90613ed6565b6d2216e584f5fa1ea926041bedfe9890920260801c91613ecc565b916e5d6af8dedb81196699c329225ee6040260801c91613ec1565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91613eb6565b916f31be135f97d08fd981231505542fcfa60260801c91613eab565b916f70d869a156d2a1b890bb3df62baf32f70260801c91613ea1565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91613e97565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91613e8d565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91613e83565b916ff3392b0822b70005940c7a398e4b70f30260801c91613e79565b916ff987a7253ac413176f2b074cf7815e540260801c91613e6f565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91613e65565b916ffe5dee046a99a2a811c461f1969c30530260801c91613e5b565b916fff2ea16466c96a3843ec78b326b528610260801c91613e52565b916fff973b41fa98c081472e6896dfb254c00260801c91613e49565b916fffcb9843d60f6159c9db58835c9266440260801c91613e40565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91613e37565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91613e2e565b916ffff97272373d413259a46990580e213a0260801c91613e25565b827f8b86327a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b905f83600f0b125f1461417b57614171925f036fffffffffffffffffffffffffffffffff16916156b9565b5f8112612d445790565b614197926fffffffffffffffffffffffffffffffff169161565e565b5f8112612d44575f0390565b905f83600f0b125f146141ce57614171925f036fffffffffffffffffffffff