@uniswap/v4-periphery
Version:
🦄 Peripheral smart contracts for interacting with Uniswap v4
1 lines • 347 kB
JSON
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"MIN_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"REMOVE_LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"SWAP_PARAMS","inputs":[],"outputs":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setupRouterCurrenciesAndPoolsWithLiquidity","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x600c8054600160ff199182168117909255601f80548216831790556077196080819052607860a0819052670de0b6b3a764000060c08190525f60e08190526020805465ffffffffffff199081166378ffff8890811790925560219390935560228290556101009490945261012092909252670de0b6b3a763ffff1961014081905261016083905260238054909216909317905560249190915560258190556101e06040526101808390526063196101a08190526bb504f333f9de6484597d89b36101c081905260268054909416909417909255602791909155602880546001600160a01b0319908116909317905560428054600e90841617905560438054909216614000600160a01b03179091555f19604655604755348015610120575f80fd5b5061e05a8061012e5f395ff3fe608060405260043610610126575f3560e01c806393ad73ed116100a1578063b5508aa911610071578063c7b8e15d11610057578063c7b8e15d1461038e578063e20c9f71146103a2578063fa7626d4146103b6575f80fd5b8063b5508aa914610356578063ba414fa61461036a575f80fd5b806393ad73ed14610295578063b0464fdc146102c2578063b0f3d802146102d6578063b1a73b8a146102ec575f80fd5b80633f7286f4116100f657806366d9a9a0116100dc57806366d9a9a01461023257806385226c8114610253578063916a17c614610274575f80fd5b80633f7286f4146101e5578063542524dd146101f9575f80fd5b80631ed7831c146101315780632ade38801461015b57806339cd20131461017c5780633e5e3c23146101d1575f80fd5b3661012d57005b5f80fd5b34801561013c575f80fd5b506101456103cf565b6040516101529190611d4f565b60405180910390f35b348015610166575f80fd5b5061016f61043c565b6040516101529190611df3565b348015610187575f80fd5b506023546024546025546101a992600281810b936301000000909204900b9184565b60408051600295860b81529390940b6020840152928201526060810191909152608001610152565b3480156101dc575f80fd5b50610145610585565b3480156101f0575f80fd5b506101456105f0565b348015610204575f80fd5b5061020d61065b565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610152565b34801561023d575f80fd5b5061024661067d565b6040516101529190611f61565b34801561025e575f80fd5b506102676107f6565b6040516101529190611ffd565b34801561027f575f80fd5b506102886108c1565b6040516101529190612072565b3480156102a0575f80fd5b506020546021546022546101a992600281810b936301000000909204900b9184565b3480156102cd575f80fd5b506102886109c4565b3480156102e1575f80fd5b506102ea610ac7565b005b3480156102f7575f80fd5b506026546027546028546103239260ff16919073ffffffffffffffffffffffffffffffffffffffff1683565b604080519315158452602084019290925273ffffffffffffffffffffffffffffffffffffffff1690820152606001610152565b348015610361575f80fd5b506102676111b8565b348015610375575f80fd5b5061037e611283565b6040519015158152602001610152565b348015610399575f80fd5b5061020d611353565b3480156103ad575f80fd5b50610145611363565b3480156103c1575f80fd5b50601f5461037e9060ff1681565b6060601680548060200260200160405190810160405280929190818152602001828054801561043257602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610407575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b8282101561057c575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610565578382905f5260205f200180546104da90612114565b80601f016020809104026020016040519081016040528092919081815260200182805461050690612114565b80156105515780601f1061052857610100808354040283529160200191610551565b820191905f5260205f20905b81548152906001019060200180831161053457829003601f168201915b5050505050815260200190600101906104bd565b50505050815250508152602001906001019061045f565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561043257602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610407575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561043257602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610407575050505050905090565b61067a600173fffd8963efd1fc6a506488495d951d5263988d26612192565b81565b6060601b805480602002602001604051908101604052809291908181526020015f905b8282101561057c578382905f5260205f2090600202016040518060400160405290815f820180546106d090612114565b80601f01602080910402602001604051908101604052809291908181526020018280546106fc90612114565b80156107475780601f1061071e57610100808354040283529160200191610747565b820191905f5260205f20905b81548152906001019060200180831161072a57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156107de57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161078b5790505b505050505081525050815260200190600101906106a0565b6060601a805480602002602001604051908101604052809291908181526020015f905b8282101561057c578382905f5260205f2001805461083690612114565b80601f016020809104026020016040519081016040528092919081815260200182805461086290612114565b80156108ad5780601f10610884576101008083540402835291602001916108ad565b820191905f5260205f20905b81548152906001019060200180831161089057829003601f168201915b505050505081526020019060010190610819565b6060601d805480602002602001604051908101604052809291908181526020015f905b8282101561057c575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff1683526001810180548351818702810187019094528084529394919385830193928301828280156109ac57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116109595790505b505050505081525050815260200190600101906108e4565b6060601c805480602002602001604051908101604052809291908181526020015f905b8282101561057c575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939491938583019392830182828015610aaf57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610a5c5790505b505050505081525050815260200190600101906109e7565b610acf6113ce565b602b5460405173ffffffffffffffffffffffffffffffffffffffff90911690610af790611d1b565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015610b2d573d5f803e3d5ffd5b50604580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690610b8190611d28565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015610bb7573d5f803e3d5ffd5b50604480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790555f610c086004611459565b9050805f81518110610c1c57610c1c6121c4565b602002602001015160295f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600181518110610c7657610c766121c4565b6020026020010151602a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600281518110610cd057610cd06121c4565b602002602001015160515f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600381518110610d2a57610d2a6121c4565b6020908102919091010151605280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602954610d8491165f61156b565b8051603980547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416179091556020830151603a8054604086015160608701519386167fffffffffffffffffff0000000000000000000000000000000000000000000000909216919091177401000000000000000000000000000000000000000062ffffff92831602177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16770100000000000000000000000000000000000000000000009190931602919091179055608090920151603b805490931690821617909155602954602a54610e969291821691165f611803565b8051604880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155602083015160498054604086015160608701519386167fffffffffffffffffff0000000000000000000000000000000000000000000000909216919091177401000000000000000000000000000000000000000062ffffff92831602177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16770100000000000000000000000000000000000000000000009190931602919091179055608090920151604a805490931690821617909155602a54605154610fa89291821691165f611803565b8051604b80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416179091556020830151604c8054604086015160608701519386167fffffffffffffffffff0000000000000000000000000000000000000000000000909216919091177401000000000000000000000000000000000000000062ffffff92831602177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16770100000000000000000000000000000000000000000000009190931602919091179055608090920151604d8054909316908216179091556051546052546110ba9291821691165f611803565b8051604e80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416179091556020830151604f8054604086015160608701519386167fffffffffffffffffff0000000000000000000000000000000000000000000000909216919091177401000000000000000000000000000000000000000062ffffff92831602177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff1677010000000000000000000000000000000000000000000000919093160291909117905560809092015160508054909316911617905550565b60606019805480602002602001604051908101604052809291908181526020015f905b8282101561057c578382905f5260205f200180546111f890612114565b80601f016020809104026020016040519081016040528092919081815260200182805461122490612114565b801561126f5780601f106112465761010080835404028352916020019161126f565b820191905f5260205f20905b81548152906001019060200180831161125257829003601f168201915b5050505050815260200190600101906111db565b6008545f9060ff161561129a575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa158015611328573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134c91906121f1565b1415905090565b61067a6401000276a36001612208565b6060601580548060200260200160405190810160405280929190818152602001828054801561043257602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610407575050505050905090565b306040516113db90611d35565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611411573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60605f61147783700100000000000000000000000000000000611b92565b90505f5b8360ff1681101561156457818181518110611498576114986121c4565b60209081029190910101516045546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015291169063095ea7b3906044016020604051808303815f875af1158015611537573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061155b9190612234565b5060010161147b565b5092915050565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506040805160a0810182525f815273ffffffffffffffffffffffffffffffffffffffff8481166020830152610bb882840152603c60608301528381166080830152602b5492517f6276cbbe00000000000000000000000000000000000000000000000000000000815291921690636276cbbe906116259084906c010000000000000000000000009060040161225a565b6020604051808303815f875af1158015611641573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116659190612300565b50604480546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201529085169163095ea7b391016020604051808303815f875af11580156116fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061171e9190612234565b50604454604080516080810182527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c8152620d89b46020820152680ad78ebc5ac62000008183018190525f606083015291517f5a6bcfda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90931692635a6bcfda92916117c291869190600401612320565b60206040518083038185885af11580156117de573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061156491906121f1565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091528273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115611865579192915b506040805160a08101825273ffffffffffffffffffffffffffffffffffffffff80861682528481166020830152610bb882840152603c60608301528381166080830152602b5492517f6276cbbe00000000000000000000000000000000000000000000000000000000815291921690636276cbbe906118f79084906c010000000000000000000000009060040161225a565b6020604051808303815f875af1158015611913573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119379190612300565b50604480546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201529086169163095ea7b391016020604051808303815f875af11580156119cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f09190612234565b50604480546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201529085169163095ea7b391016020604051808303815f875af1158015611a85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aa99190612234565b50604454604080516080810182527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c8152620d89b46020820152680ad78ebc5ac6200000818301525f606082015290517f5a6bcfda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921691635a6bcfda91611b4a91859190600401612320565b6020604051808303815f875af1158015611b66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8a91906121f1565b509392505050565b60608260ff1667ffffffffffffffff811115611bb057611bb0612412565b604051908082528060200260200182016040528015611bd9578160200160208202803683370190505b5090505f5b8360ff168160ff161015611564576012604051611bfa90611d42565b611c04919061243f565b604051809103905ff080158015611c1d573d5f803e3d5ffd5b50828260ff1681518110611c3357611c336121c4565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160ff1681518110611c8257611c826121c4565b60209081029190910101516040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015f604051808303815f87803b158015611cf9575f80fd5b505af1158015611d0b573d5f803e3d5ffd5b505060019092019150611bde9050565b6123da806124ca83390190565b611c3d806148a483390190565b616a05806164e183390190565b6111688061cee683390190565b602080825282518282018190525f918401906040840190835b81811015611d9c57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101611d68565b509095945050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015611ef9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805173ffffffffffffffffffffffffffffffffffffffff168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b81811015611edf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352611ec9848651611da7565b6020958601959094509290920191600101611e8f565b509197505050602094850194929092019150600101611e19565b50929695505050505050565b5f8151808452602084019350602083015f5b82811015611f575781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101611f17565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015611ef9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752611fcb6040880182611da7565b9050602082015191508681036020880152611fe68183611f05565b965050506020938401939190910190600101611f87565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015611ef9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261205d858351611da7565b94506020938401939190910190600101612023565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015611ef9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815173ffffffffffffffffffffffffffffffffffffffff815116865260208101519050604060208701526120fe6040870182611f05565b9550506020938401939190910190600101612098565b600181811c9082168061212857607f821691505b60208210810361215f577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff82811682821603908111156121be576121be612165565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215612201575f80fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff81811683821601908111156121be576121be612165565b5f60208284031215612244575f80fd5b81518015158114612253575f80fd5b9392505050565b60c081016122dd828573ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b73ffffffffffffffffffffffffffffffffffffffff831660a08301529392505050565b5f60208284031215612310575f80fd5b81518060020b8114612253575f80fd5b61239f818473ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b815160020b60a0820152602082015160020b60c0820152604082015160e0820152606082015161010082015261014061012082015260026101408201527f30780000000000000000000000000000000000000000000000000000000000006101608201525f610180820190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b606081525f61247b60608301600481527f5445535400000000000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526124b781600481527f5445535400000000000000000000000000000000000000000000000000000000602082015260400190565b91505060ff831660408301529291505056fe60a0604052348015600e575f80fd5b506040516123da3803806123da833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b60805161230f6100cb5f395f8181610128015281816101f30152818161035901528181610f0201528181610fde01528181611052015281816110ed0152818161119501528181611270015281816116230152818161187401526118b6015261230f5ff3fe60806040526004361061005b575f3560e01c8063a1bfb5ff11610041578063a1bfb5ff146100b0578063d737d0c7146100c3578063dc4c90d314610117575f80fd5b80634f84885b1461006657806391dd73461461007b575f80fd5b3661006257005b5f80fd5b610079610074366004611c6b565b61014a565b005b348015610086575f80fd5b5061009a610095366004611c6b565b6101d9565b6040516100a79190611cd9565b60405180910390f35b6100796100be366004611c6b565b61025d565b3480156100ce575f80fd5b507f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c5b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a7565b348015610122575f80fd5b506100f27f000000000000000000000000000000000000000000000000000000000000000081565b73ffffffffffffffffffffffffffffffffffffffff7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c16156101b9576040517f6f5ffb7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101c2336102f6565b6101cc828261031c565b6101d55f6102f6565b5050565b60603373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461024a576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61025483836103f5565b90505b92915050565b73ffffffffffffffffffffffffffffffffffffffff7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c16156102cc576040517f6f5ffb7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102d5336102f6565b6102df828261031c565b4780156102f0576102f03382610432565b506101d55f5b807f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5d50565b6040517f48c8949100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906348c89491906103909085908590600401611d73565b5f604051808303815f875af11580156103ab573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103f09190810190611e0a565b505050565b6060365f365f61040587876104a9565b935093509350935061041984848484610551565b505060408051602081019091525f815295945050505050565b5f805f805f85875af19050806103f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c45440000000000000000000000000060448201526064015b60405180910390fd5b365f365f604086351860608701945063ffffffff6040880135169350606063ffffffe0601f860116018060208901351882179150808801905063ffffffff8135169250602081019350508160051b805f5b8281101561052957858101358281189490941793860135601f0163ffffffe016909101602090810191016104fa565b508085018989011083171561054557633b99b53d5f526004601cfd5b50505092959194509250565b8281811461058b576040517faaad13f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156105ea575f8686838181106105a8576105a8611ebc565b919091013560f81c91506105e19050818686858181106105ca576105ca611ebc565b90506020028101906105dc9190611ee9565b6105f2565b5060010161058d565b505050505050565b600b83101561067e576007830361061f573661060e8383610884565b9050610619816108a3565b50505050565b6006830361063d57366106328383610a41565b905061061981610a59565b6009830361065b57366106508383610884565b905061061981610baf565b60088303610679573661066e8383610a41565b905061061981610d64565b61084f565b600c8303610712575f806106928484610ebe565b915091505f6106a083610ee6565b9050818111156106e6576040517f12bacdd300000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016104a0565b6105ea837f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c83610f8d565b600f83036107a6575f806107268484610ebe565b915091505f61073483611179565b90508181101561077a576040517f8b063d7300000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016104a0565b6105ea837f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c83611210565b600b83036107dd575f805f6107bb85856112cc565b9250925092506105ea836107ce836112fa565b6107d8858761132d565b610f8d565b600e8303610814575f805f6107f285856112cc565b9250925092506105ea8361080584611390565b61080f8487611442565b611210565b6010830361084f575f805f61082985856112cc565b9250925092506105ea8361083c84611390565b61080f8461084988611179565b90611451565b6040517f5cda29d7000000000000000000000000000000000000000000000000000000008152600481018490526024016104a0565b3660a082101561089b57633b99b53d5f526004601cfd5b505080350190565b5f6108b16020830183611f51565b91505f9050806108c46020850185611fd9565b90505f6108d76060860160408701611ff4565b90506fffffffffffffffffffffffffffffffff8116610904576109016108fc83611179565b6114a5565b90505b365f5b858110156109a65761091c6020880188611f51565b8281811061092c5761092c611ebc565b905060200281019061093e9190612023565b91505f8061094c84876114e8565b909250905061098861098083836fffffffffffffffffffffffffffffffff89165f0361097b60808a018a611ee9565b61161f565b600f0b611748565b965086945061099a6020850185611fd9565b95505050600101610907565b506109b76080870160608801611ff4565b6fffffffffffffffffffffffffffffffff16846fffffffffffffffffffffffffffffffff1610156105ea576109f26080870160608801611ff4565b6040517f8b063d730000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff918216600482015290851660248201526044016104a0565b3661014082101561089b57633b99b53d5f526004601cfd5b5f610a6a60e0830160c08401611ff4565b90506fffffffffffffffffffffffffffffffff8116610ac257610abf6108fc610a9960c0850160a0860161205f565b610ab257610aad6040850160208601611fd9565b611179565b610aad6020850185611fd9565b90505b5f610b11610980610ad8368690038601866120a1565b610ae860c0870160a0880161205f565b610b036fffffffffffffffffffffffffffffffff8716612162565b61097b610100890189611ee9565b9050610b24610100840160e08501611ff4565b6fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff1610156103f057610b60610100840160e08501611ff4565b6040517f8b063d730000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff918216600482015290821660248201526044016104a0565b5f610bbd6020830183611f51565b91505f905080610bd36060850160408601611ff4565b90505f610be36020860186611fd9565b9050366fffffffffffffffffffffffffffffffff8316610c0c57610c096108fc83610ee6565b92505b845b8015610cc957610c216020880188611f51565b60018303818110610c3457610c34611ebc565b9050602002810190610c469190612023565b91505f80610c5484866114e8565b9092509050610c8c610c828383156fffffffffffffffffffffffffffffffff8a1661097b60808a018a611ee9565b600f0b5f036114a5565b9650869550610c9e6020850185611fd9565b945050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01610c0e565b50610cda6080870160608801611ff4565b6fffffffffffffffffffffffffffffffff16846fffffffffffffffffffffffffffffffff1611156105ea57610d156080870160608801611ff4565b6040517f12bacdd30000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff918216600482015290851660248201526044016104a0565b5f610d7560e0830160c08401611ff4565b90506fffffffffffffffffffffffffffffffff8116610dcd57610dca6108fc610da460c0850160a0860161205f565b610dba57610db56020850185611fd9565b610ee6565b610db56040850160208601611fd9565b90505b5f610e20610e14610de3368690038601866120a1565b610df360c0870160a0880161205f565b6fffffffffffffffffffffffffffffffff861661097b610100890189611ee9565b600f0b6108fc90612162565b9050610e33610100840160e08501611ff4565b6fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff1611156103f057610e6f610100840160e08501611ff4565b6040517f12bacdd30000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff918216600482015290821660248201526044016104a0565b5f806040831015610ed657633b99b53d5f526004601cfd5b5050813592602090920135919050565b5f80610f2973ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016308561177d565b90505f811315610f7d576040517f3351b26000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016104a0565b610f8681612162565b9392505050565b805f03610f9957505050565b6040517fa584119400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a5841194906024015f604051808303815f87803b15801561101f575f80fd5b505af1158015611031573d5f803e3d5ffd5b5050505073ffffffffffffffffffffffffffffffffffffffff83166110e0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b4826040518263ffffffff1660e01b815260040160206040518083038185885af11580156110bb573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906106199190612198565b6110eb83838361183b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611155573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106199190612198565b5f806111bc73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016308561177d565b90505f811215610257576040517f4c085bf100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016104a0565b805f0361121c57505050565b6040517f0b0d9c0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c09906064015f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b50505050505050565b5f805f60608410156112e557633b99b53d5f526004601cfd5b50508235936020840135936040013592509050565b5f816113065730610257565b7f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c610257565b5f7f8000000000000000000000000000000000000000000000000000000000000000830361137b576113748273ffffffffffffffffffffffffffffffffffffffff166118db565b9050610257565b826113895761137482610ee6565b5081610257565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff8316016113f5577f0aedd6bde10e3aa2adec092b02a3e3e805795516cda41f27aa145b8f300af87a5c610257565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe73ffffffffffffffffffffffffffffffffffffffff831601611439575030919050565b5090565b919050565b5f826113895761137482611179565b5f61271082111561148e576040517fdeaa01e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061149b83856121af565b61025491906121c6565b806fffffffffffffffffffffffffffffffff8116811461143d5761143d7f93dafdf10000000000000000000000000000000000000000000000000000000061198a565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091525f806115216020860186611fd9565b90505f8073ffffffffffffffffffffffffffffffffffffffff8084169087161061154c57828661154f565b85835b909250905073ffffffffffffffffffffffffffffffffffffffff8087169083161493506040518060a001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020018860200160208101906115c891906121fe565b62ffffff1681526020016115e260608a0160408b01612217565b60020b81526020016115fa60808a0160608b01611fd9565b73ffffffffffffffffffffffffffffffffffffffff1681525094505050509250929050565b5f807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f3cd914c8860405180606001604052808a151581526020018981526020018a6116965773fffd8963efd1fc6a506488495d951d5263988d2561169d565b6401000276a45b73ffffffffffffffffffffffffffffffffffffffff1681525087876040518563ffffffff1660e01b81526004016116d79493929190612230565b6020604051808303815f875af11580156116f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117179190612198565b90508515155f8612146117335761172e8160801d90565b61173d565b61173d81600f0b90565b979650505050505050565b5f8082600f0b1215611439576114397f93dafdf10000000000000000000000000000000000000000000000000000000061198a565b5f8073ffffffffffffffffffffffffffffffffffffffff84165f5273ffffffffffffffffffffffffffffffffffffffff831660205260405f2090508473ffffffffffffffffffffffffffffffffffffffff1663f135baaa826040518263ffffffff1660e01b81526004016117f391815260200190565b602060405180830381865afa15801561180e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118329190612198565b95945050505050565b3073ffffffffffffffffffffffffffffffffffffffff831603611899576103f073ffffffffffffffffffffffffffffffffffffffff84167f000000000000000000000000000000000000000000000000000000000000000083611992565b6103f073ffffffffffffffffffffffffffffffffffffffff8416837f000000000000000000000000000000000000000000000000000000000000000084611aaf565b5f73ffffffffffffffffffffffffffffffffffffffff82166118fe575047919050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611966573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102579190612198565b805f5260045ffd5b5f73ffffffffffffffffffffffffffffffffffffffff84166119ed575f805f8085875af19050806119e8576119e8835f7ff4b3b1bc00000000000000000000000000000000000000000000000000000000611b9d565b610619565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f6040820152508061061957610619847fa9059cbb000000000000000000000000000000000000000000000000000000007ff27f64e400000000000000000000000000000000000000000000000000000000611b9d565b5f6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff8416602482015282604482015260205f6064835f8a5af13d15601f3d1160015f511416171691505080611b96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c454400000000000000000000000060448201526064016104a0565b5050505050565b6040517f90bfb8650000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff851660048301527fffffffff0000000000000000000000000000000000000000000000000000000084166024830152608060448301526020601f3d018190040260a0810160648401523d608484015290913d5f60a483013e60048260a4018201527fffffffff0000000000000000000000000000000000000000000000000000000084168260c4018201528160e40181fd5b5f8060208385031215611c7c575f80fd5b823567ffffffffffffffff811115611c92575f80fd5b8301601f81018513611ca2575f80fd5b803567ffffffffffffffff811115611cb8575f80fd5b856020828401011115611cc9575f80fd5b6020919091019590945092505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f611d86602083018486611d2c565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611e0257611e02611d8e565b604052919050565b5f60208284031215611e1a575f80fd5b815167ffffffffffffffff811115611e30575f80fd5b8201601f81018413611e40575f80fd5b805167ffffffffffffffff811115611e5a57611e5a611d8e565b611e8b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611dbb565b818152856020838501011115611e9f575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611f1c575f80fd5b83018035915067ffffffffffffffff821115611f36575f80fd5b602001915036819003821315611f4a575f80fd5b9250929050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611f84575f80fd5b83018035915067ffffffffffffffff821115611f9e575f80fd5b6020019150600581901b3603821315611f4a575f80fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611fd6575f80fd5b50565b5f60208284031215611fe9575f80fd5b8135610f8681611fb5565b5f60208284031215612004575f80fd5b81356fffffffffffffffffffffffffffffffff81168114610f86575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112612055575f80fd5b9190910192915050565b5f6020828403121561206f575f80fd5b81358015158114610f86575f80fd5b803562ffffff8116811461143d575f80fd5b8035600281900b811461143d575f80fd5b5f60a08284031280156120b2575f80fd5b5060405160a0810167ffffffffffffffff811182821017156120d6576120d6611d8e565b60405282356120e481611fb5565b815260208301356120f481611fb5565b60208201526121056040840161207e565b604082015261211660608401612090565b6060820152608083013561212981611fb5565b60808201529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7f8000000000000000000000000000000000000000000000000000000000000000820361219257612192612135565b505f0390565b5f602082840312156121a8575f80fd5b5051919050565b808202811582820484141761025757610257612135565b5f826121f9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f6020828403121561220e575f80fd5b6102548261207e565b5f60208284031215612227575f80fd5b61025482612090565b73ffffffffffffffffffffffffffffffffffffffff855116815273ffffffffffffffffffffffffffffffffffffffff602086015116602082015262ffffff6040860151166040820152606085015160020b606082015273ffffffffffffffffffffffffffffffffffffffff60808601511660808201526122df60a08201858051151582526020808201519083015260409081015173ffffffffffffffffffffffffffffffffffffffff16910152565b6101206101008201525f6122f861012083018486611d2c565b969550505050505056fea164736f6c634300081a000a60a0604052348015600e575f80fd5b50604051611c3d380380611c3d833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b608051611b736100ca5f395f81816079015281816101020152818161027f015281816102f301528181610324015281816104090152818161058d015281816105f001528181610679015281816106d7015281816108e401526109240152611b735ff3fe60806040526004361061003e575f3560e01c80630a5b11e414610042578063481c6a75146100685780635a6bcfda146100c057806391dd7346146100d3575b5f80fd5b6100556100503660046114c3565b6100ff565b6040519081526020015b60405180910390f35b348015610073575f80fd5b5061009b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161005f565b6100556100ce36600461154a565b61024f565b3480156100de575f80fd5b506100f26100ed3660046115a8565b610265565b60405161005f9190611662565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348c894916040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018881526020018781526020018615158152602001851515815250604051602001610193919061167b565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016101be9190611662565b5f604051808303815f875af11580156101d9573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261021e919081019061179a565b806020019051810190610231919061180f565b9050478015610245576102455f3383610729565b5095945050505050565b5f61025d8484845f806100ff565b949350505050565b60603373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146102a8575f80fd5b5f6102b583850185611826565b90505f61031d6102ca836020015160a0902090565b60408401518051602082015160609092015173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016939230929161084c565b505090505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635a6bcfda8460200151856040015186606001516040518463ffffffff1660e01b815260040161038b939291906118ef565b60408051808303815f875af11580156103a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ca91906119b3565b5090505f6104336103e0856020015160a0902090565b60408601518051602082015160609092015173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016939230929161084c565b505090505f61044d85602001515f0151865f0151306108a3565b925050505f610468866020015160200151875f0151306108a3565b9250505082600f0b86604001516040015186600f0b6104879190611a02565b146104f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6c6971756964697479206368616e676520696e636f7272656374000000000000604482015260640160405180910390fd5b5f866040015160400151121561053a575f82138061050f57505f81135b61051b5761051b611a29565b5f82128061052857505f81125b1561053557610535611a29565b61057d565b5f866040015160400151131561057d575f82128061055757505f81125b61056357610563611a29565b5f82138061057057505f81135b1561057d5761057d611a29565b5f8212156105e05785516105e0907f0000000000000000000000000000000000000000000000000000000000000000906105b685611a56565b60808a015160208b01515173ffffffffffffffffffffffffffffffffffffffff1693929190610956565b5f811215610645578551610645907f00000000000000000000000000000000000000000000000000000000000000009061061984611a56565b60808a01516020808c0151015173ffffffffffffffffffffffffffffffffffffffff1693929190610956565b5f8213156106a157855160a08701516020880151516106a19273ffffffffffffffffffffffffffffffffffffffff909116917f000000000000000000000000000000000000000000000000000000000000000091908690610d14565b5f8113156106ff57855160a087015160208089015101516106ff9273ffffffffffffffffffffffffffffffffffffffff909116917f000000000000000000000000000000000000000000000000000000000000000091908590610d14565b60408051602081018690520160405160208183030381529060405296505050505050505b92915050565b5f73ffffffff