@uniswap/v4-periphery
Version:
🦄 Peripheral smart contracts for interacting with Uniswap v4
1 lines • 157 kB
JSON
{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"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":"setUp","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":"function","name":"test_fuzz_multicall_bubbleRevert_36bytes","inputs":[{"name":"num","type":"uint8","internalType":"uint8"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_multicall_bubbleRevert_68bytes","inputs":[{"name":"a","type":"uint256","internalType":"uint256"},{"name":"b","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_multicall_bubbleRevert_arbitraryBytes","inputs":[{"name":"length","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_bothPayable","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_bubbleRevert_4bytes","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_bubbleRevert_externalRevertSimple","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_bubbleRevert_externalRevertString","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_bubbleRevert_externalRevertWithParams","inputs":[{"name":"a","type":"uint256","internalType":"uint256"},{"name":"b","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_bubbleRevert_string","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_double_send","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_firstRevert","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_payableStoresMsgValue","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_returnSender","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_returnSender_prank","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_secondRevert","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_multicall_unpayableRevert","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"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":"0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602b575f80fd5b50615009806100395f395ff3fe608060405234801561000f575f80fd5b50600436106101d1575f3560e01c806385226c81116100fe578063b369fffd1161009e578063d712e2d71161006e578063d712e2d714610322578063e20c9f711461032a578063fa7626d414610332578063fdbeb46e1461033f575f80fd5b8063b369fffd146102e7578063b5508aa9146102fa578063ba414fa614610302578063bc9fa4641461031a575f80fd5b8063916a17c6116100d9578063916a17c6146102ba5780639e305c18146102cf578063ab4a1880146102d7578063b0464fdc146102df575f80fd5b806385226c811461028a578063896318471461029f5780638eb71cd8146102a7575f80fd5b80632d6c3a0a1161017457806366d9a9a01161014457806366d9a9a01461025d57806376d4f658146102725780637d539dc11461027a5780637de9bce114610282575f80fd5b80632d6c3a0a1461023d5780633e5e3c23146102455780633f7286f41461024d578063649e2e7314610255575f80fd5b80631b28eaa2116101af5780631b28eaa2146101ef5780631ed7831c14610202578063203f6dab146102205780632ade388014610228575f80fd5b806308d4aac9146101d55780630a9254e4146101df5780630b216bdd146101e7575b5f80fd5b6101dd610352565b005b6101dd6105ea565b6101dd610652565b6101dd6101fd366004613917565b610863565b61020a610b87565b6040516102179190613937565b60405180910390f35b6101dd610bf4565b610230610d07565b60405161021791906139db565b6101dd610e50565b61020a6110a1565b61020a61110c565b6101dd611177565b61026561132d565b6040516102179190613b49565b6101dd6114a6565b6101dd611736565b6101dd6119e2565b610292611b7c565b6040516102179190613be5565b6101dd611c47565b6101dd6102b5366004613c5a565b611f03565b6102c261223c565b6040516102179190613c7a565b6101dd61233f565b6101dd612517565b6102c2612825565b6101dd6102f5366004613d1c565b612928565b610292612da1565b61030a612e6c565b6040519015158152602001610217565b6101dd612f3c565b6101dd612f9b565b61020a6130ae565b601f5461030a9060ff1681565b6101dd61034d366004613917565b613119565b5f6103916040518060400160405280600581526020017f414c494345000000000000000000000000000000000000000000000000000000815250613374565b6040805160018082528183019092529192505f9190816020015b60608152602001906001900390816103ab5750506040805173ffffffffffffffffffffffffffffffffffffffff85166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5170a9d00000000000000000000000000000000000000000000000000000000017905281519192509082905f9061045357610453613d6a565b60209081029190910101526040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b1580156104d6575f80fd5b505af11580156104e8573d5f803e3d5ffd5b5050601f546040517fac9650d80000000000000000000000000000000000000000000000000000000081525f935061010090910473ffffffffffffffffffffffffffffffffffffffff16915063ac9650d890610548908590600401613d97565b5f604051808303815f875af1158015610563573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105a89190810190613e5b565b90505f815f815181106105bd576105bd613d6a565b60200260200101518060200190518101906105d89190613fc2565b90506105e48185613385565b50505050565b6040516105f69061390a565b604051809103905ff08015801561060f573d5f803e3d5ffd5b50601f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6040805160018082528183019092525f91816020015b60608152602001906001900390816106685750506040519091507f3b83b70c00000000000000000000000000000000000000000000000000000000906106b090602401613fdd565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050815f8151811061071f5761071f613d6a565b60209081029190910101526040517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb39061077890600401613fdd565b5f604051808303815f87803b15801561078f575f80fd5b505af11580156107a1573d5f803e3d5ffd5b5050601f546040517fac9650d800000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff16925063ac9650d891506107ff908490600401613d97565b5f604051808303815f875af115801561081a573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261085f9190810190613e5b565b5050565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610879575050604080516024810186905260448082018690528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f580026800000000000000000000000000000000000000000000000000000000017905281519192509082905f9061091057610910613d6a565b60209081029190910181019190915260408051602481018690526044808201869052825180830390910181526064909101825291820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f251d660700000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb3916109d7919060040161401f565b5f604051808303815f87803b1580156109ee575f80fd5b505af1158015610a00573d5f803e3d5ffd5b5050601f546040517fac9650d800000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff16925063ac9650d89150610a5e908490600401613d97565b5f604051808303815f875af1158015610a79573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610abe9190810190613e5b565b50601f546040517f58002680000000000000000000000000000000000000000000000000000000008152600481018590526024810184905261010090910473ffffffffffffffffffffffffffffffffffffffff16906358002680906044015f6040518083038186803b158015610b32575f80fd5b505afa925050508015610b43575060015b610b82573d808015610b70576040519150601f19603f3d011682016040523d82523d5f602084013e610b75565b606091505b506105e48151604461341f565b505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610bea57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610bbf575b5050505050905090565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610c0a579050506040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f510ccffe0000000000000000000000000000000000000000000000000000000017905281519192509082905f90610c8c57610c8c613d6a565b60209081029190910101526040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd845fc92000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401610778565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015610e47575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610e30578382905f5260205f20018054610da590614031565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd190614031565b8015610e1c5780601f10610df357610100808354040283529160200191610e1c565b820191905f5260205f20905b815481529060010190602001808311610dff57829003601f168201915b505050505081526020019060010190610d88565b505050508152505081526020019060010190610d2a565b50505050905090565b601f54610e7990610100900473ffffffffffffffffffffffffffffffffffffffff16315f61341f565b6040805160018082528183019092525f91816020015b6060815260200190600190039081610e8f579050506040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ffa6b61540000000000000000000000000000000000000000000000000000000017905281519192509082905f90610f1157610f11613d6a565b6020908102919091010152601f546040517fac9650d800000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063ac9650d890606490610f79908590600401613d97565b5f6040518083038185885af1158015610f94573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610fda9190810190613e5b565b50601f5461100590610100900473ffffffffffffffffffffffffffffffffffffffff1631606461341f565b61109e601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ddf363d76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611073573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110979190614082565b606461341f565b50565b60606018805480602002602001604051908101604052809291908181526020018280548015610bea57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610bbf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610bea57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610bbf575050505050905090565b604080516002808252606082019092525f91816020015b606081526020019060019003908161118e575050604080516001602482015260026044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3b16a6a30000000000000000000000000000000000000000000000000000000017905281519192509082905f9061122857611228613d6a565b60209081029190910101526040517f3b83b70c000000000000000000000000000000000000000000000000000000009061126490602401614099565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050816001815181106112d4576112d4613d6a565b60209081029190910101526040517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb39061077890600401614099565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015610e47578382905f5260205f2090600202016040518060400160405290815f8201805461138090614031565b80601f01602080910402602001604051908101604052809291908181526020018280546113ac90614031565b80156113f75780601f106113ce576101008083540402835291602001916113f7565b820191905f5260205f20905b8154815290600101906020018083116113da57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561148e57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161143b5790505b50505050508152505081526020019060010190611350565b604080516002808252606082019092525f91816020015b60608152602001906001900390816114bd579050506040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ffa6b61540000000000000000000000000000000000000000000000000000000017905281519192509082905f9061153f5761153f613d6a565b6020908102919091010152604051600a6024820152601460448201527f3b16a6a30000000000000000000000000000000000000000000000000000000090606401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050816001815181106115f0576115f0613d6a565b60200260200101819052507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663f48448146040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611662575f80fd5b505af1158015611674573d5f803e3d5ffd5b5050601f546040517fac9650d800000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff16925063ac9650d891506064906116d5908590600401613d97565b5f6040518083038185885af11580156116f0573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261085f9190810190613e5b565b6040805160018082528183019092525f91816020015b606081526020019060019003908161174c579050506040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1438a8fa0000000000000000000000000000000000000000000000000000000017905281519192509082905f906117ce576117ce613d6a565b60209081029190910101526040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fa55c4f1f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015f604051808303815f87803b15801561185b575f80fd5b505af115801561186d573d5f803e3d5ffd5b5050601f546040517fac9650d800000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff16925063ac9650d891506118cb908490600401613d97565b5f604051808303815f875af11580156118e6573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261192b9190810190613e5b565b50601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631438a8fa6040518163ffffffff1660e01b81526004015f6040518083038186803b158015611992575f80fd5b505afa9250505080156119a3575060015b61109e573d8080156119d0576040519150601f19603f3d011682016040523d82523d5f602084013e6119d5565b606091505b5061085f8151600461341f565b6040805160018082528183019092525f91816020015b60608152602001906001900390816119f8579050506040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5170a9d00000000000000000000000000000000000000000000000000000000017905281519192509082905f90611a7a57611a7a613d6a565b6020908102919091010152601f546040517fac9650d80000000000000000000000000000000000000000000000000000000081525f91610100900473ffffffffffffffffffffffffffffffffffffffff169063ac9650d890611ae0908590600401613d97565b5f604051808303815f875af1158015611afb573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611b409190810190613e5b565b90505f815f81518110611b5557611b55613d6a565b6020026020010151806020019051810190611b709190613fc2565b9050610b828130613385565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015610e47578382905f5260205f20018054611bbc90614031565b80601f0160208091040260200160405190810160405280929190818152602001828054611be890614031565b8015611c335780601f10611c0a57610100808354040283529160200191611c33565b820191905f5260205f20905b815481529060010190602001808311611c1657829003601f168201915b505050505081526020019060010190611b9f565b604080516002808252606082019092525f91816020015b6060815260200190600190039081611c5e57505060408051600a602482015260146044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3b16a6a30000000000000000000000000000000000000000000000000000000017905281519192509082905f90611cf857611cf8613d6a565b602090810291909101015260405160016024820152600260448201527f3b16a6a30000000000000000000000000000000000000000000000000000000090606401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505081600181518110611da957611da9613d6a565b6020908102919091010152601f546040517fac9650d80000000000000000000000000000000000000000000000000000000081525f91610100900473ffffffffffffffffffffffffffffffffffffffff169063ac9650d890611e0f908590600401613d97565b5f604051808303815f875af1158015611e2a573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e6f9190810190613e5b565b90505f80825f81518110611e8557611e85613d6a565b6020026020010151806020019051810190611ea091906140d5565b91509150611eaf82600a61341f565b611eba81601461341f565b82600181518110611ecd57611ecd613d6a565b6020026020010151806020019051810190611ee891906140d5565b9092509050611ef882600161341f565b6105e481600261341f565b6040805160018082528183019092525f91816020015b6060815260200190600190039081611f195750506040805160ff85166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9c01753e0000000000000000000000000000000000000000000000000000000017905281519192509082905f90611fae57611fae613d6a565b602090810291909101015260405160ff83166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3907fd04addd70000000000000000000000000000000000000000000000000000000090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e084901b90921682526120969160040161401f565b5f604051808303815f87803b1580156120ad575f80fd5b505af11580156120bf573d5f803e3d5ffd5b5050601f546040517fac9650d800000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff16925063ac9650d8915061211d908490600401613d97565b5f604051808303815f875af1158015612138573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261217d9190810190613e5b565b50601f546040517f9c01753e00000000000000000000000000000000000000000000000000000000815260ff8416600482015261010090910473ffffffffffffffffffffffffffffffffffffffff1690639c01753e906024015f6040518083038186803b1580156121ec575f80fd5b505afa9250505080156121fd575060015b61085f573d80801561222a576040519150601f19603f3d011682016040523d82523d5f602084013e61222f565b606091505b50610b828151602461341f565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015610e47575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561232757602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116122d45790505b5050505050815250508152602001906001019061225f565b604080516002808252606082019092525f91816020015b60608152602001906001900390816123565750506040519091507f3b83b70c000000000000000000000000000000000000000000000000000000009061239e906024016140f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050815f8151811061240d5761240d613d6a565b602090810291909101015260405160016024820152600260448201527f3b16a6a30000000000000000000000000000000000000000000000000000000090606401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050816001815181106124be576124be613d6a565b60209081029190910101526040517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390610778906004016140f7565b604080516002808252606082019092525f91816020015b606081526020019060019003908161252e579050506040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ffa6b61540000000000000000000000000000000000000000000000000000000017905281519192509082905f906125b0576125b0613d6a565b60209081029190910181019190915260408051600481526024810190915290810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad64e4040000000000000000000000000000000000000000000000000000000017905281518290600190811061262a5761262a613d6a565b6020908102919091010152601f546040517fac9650d800000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff169063ac9650d890606490612692908590600401613d97565b5f6040518083038185885af11580156126ad573d5f803e3d5ffd5b50505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526126f39190810190613e5b565b50601f5461271e90610100900473ffffffffffffffffffffffffffffffffffffffff1631606461341f565b61278c601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ddf363d76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611073573d5f803e3d5ffd5b61109e601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e8055c56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061281e9190614082565b60c861341f565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015610e47575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561291057602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128bd5790505b50505050508152505081526020019060010190612848565b6129398161ffff165f611000613477565b90505f8161ffff1667ffffffffffffffff81111561295957612959613d3d565b6040519080825280601f01601f191660200182016040528015612983576020820181803683370190505b5090505f5b81518110156129dd578060f81b8282815181106129a7576129a7613d6a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101612988565b506040805160018082528183019092525f91816020015b60608152602001906001900390816129f45750506040519091507f4ec951bb0000000000000000000000000000000000000000000000000000000090612a3e90849060240161401f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050815f81518110612aad57612aad613d6a565b6020908102919091010152604051737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3907f2dea06070000000000000000000000000000000000000000000000000000000090612b0790869060240161401f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e084901b9092168252612b979160040161401f565b5f604051808303815f87803b158015612bae575f80fd5b505af1158015612bc0573d5f803e3d5ffd5b5050601f546040517fac9650d800000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff16925063ac9650d89150612c1e908490600401613d97565b5f604051808303815f875af1158015612c39573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612c7e9190810190613e5b565b50601f546040517f4ec951bb00000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff1690634ec951bb90612cd990859060040161401f565b5f6040518083038186803b158015612cef575f80fd5b505afa925050508015612d00575060015b610b82573d808015612d2d576040519150601f19603f3d011682016040523d82523d5f602084013e612d32565b606091505b508361ffff165f03612d4f57612d4a8151604461341f565b6105e4565b8251604490602090612d6390600190614160565b612d6d91906141a0565b612d789060016141b3565b612d839060206141c6565b612d8d90826141b3565b9050612d9a82518261341f565b5050505050565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015610e47578382905f5260205f20018054612de190614031565b80601f0160208091040260200160405190810160405280929190818152602001828054612e0d90614031565b8015612e585780601f10612e2f57610100808354040283529160200191612e58565b820191905f5260205f20905b815481529060010190602001808311612e3b57829003601f168201915b505050505081526020019060010190612dc4565b6008545f9060ff1615612e83575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa158015612f11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f359190614082565b1415905090565b604080516002808252606082019092525f91816020015b6060815260200190600190039081612f535750506040519091507f2071722400000000000000000000000000000000000000000000000000000000906106b090602401613fdd565b604080516002808252606082019092525f91816020015b6060815260200190600190039081612fb2579050506040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ffa6b61540000000000000000000000000000000000000000000000000000000017905281519192509082905f9061303457613034613d6a565b60209081029190910181019190915260408051600481526024810190915290810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ffa6b615400000000000000000000000000000000000000000000000000000000179052815182906001908110610f1157610f11613d6a565b60606015805480602002602001604051908101604052809291908181526020018280548015610bea57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610bbf575050505050905090565b6040805160018082528183019092525f91816020015b606081526020019060019003908161312f575050604080516024810186905260448082018690528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0b9666ba0000000000000000000000000000000000000000000000000000000017905281519192509082905f906131c6576131c6613d6a565b60209081029190910181019190915260408051602481018690526044808201869052825180830390910181526064909101825291820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9407b1cb00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb39161328d919060040161401f565b5f604051808303815f87803b1580156132a4575f80fd5b505af11580156132b6573d5f803e3d5ffd5b5050601f546040517fac9650d800000000000000000000000000000000000000000000000000000000815261010090910473ffffffffffffffffffffffffffffffffffffffff16925063ac9650d89150613314908490600401613d97565b5f604051808303815f875af115801561332f573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105e49190810190613e5b565b5f61337e826134cb565b5092915050565b6040517f515361f600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f6906044015b5f6040518083038186803b158015613405575f80fd5b505afa158015613417573d5f803e3d5ffd5b505050505050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044016133ef565b5f613483848484613626565b90506134c46040518060400160405280600c81526020017f426f756e6420726573756c7400000000000000000000000000000000000000008152508261385a565b9392505050565b5f80826040516020016134de91906141dd565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529082905280516020909101207fffa18649000000000000000000000000000000000000000000000000000000008252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa15801561357b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061359f9190613fc2565b6040517fc657c718000000000000000000000000000000000000000000000000000000008152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c718906135f490859087906004016141f3565b5f604051808303815f87803b15801561360b575f80fd5b505af115801561361d573d5f803e3d5ffd5b50505050915091565b5f818311156136bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e0000606482015260840160405180910390fd5b8284101580156136cb5750818411155b156136d75750826134c4565b5f6136e28484614160565b6136ed9060016141b3565b9050600385111580156136ff57508481115b156137165761370e85856141b3565b9150506134c4565b61374160037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff614160565b85101580156137785750613775857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff614160565b81115b156137b1576137a7857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff614160565b61370e9084614160565b82851115613804575f6137c48487614160565b90505f6137d18383614229565b9050805f036137e5578493505050506134c4565b60016137f182886141b3565b6137fb9190614160565b93505050613852565b83851015613852575f6138178686614160565b90505f6138248383614229565b9050805f03613838578593505050506134c4565b6138428186614160565b61384d9060016141b3565b935050505b509392505050565b61085f828260405160240161387092919061423c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb60e72cc0000000000000000000000000000000000000000000000000000000017905261109e8180516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b610d9f8061425e83390190565b5f8060408385031215613928575f80fd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561398457835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101613950565b509095945050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613ae1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805173ffffffffffffffffffffffffffffffffffffffff168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b81811015613ac7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352613ab184865161398f565b6020958601959094509290920191600101613a77565b509197505050602094850194929092019150600101613a01565b50929695505050505050565b5f8151808452602084019350602083015f5b82811015613b3f5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101613aff565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613ae1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752613bb3604088018261398f565b9050602082015191508681036020880152613bce8183613aed565b965050506020938401939190910190600101613b6f565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613ae1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452613c4585835161398f565b94506020938401939190910190600101613c0b565b5f60208284031215613c6a575f80fd5b813560ff811681146134c4575f80fd5b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613ae1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815173ffffffffffffffffffffffffffffffffffffffff81511686526020810151905060406020870152613d066040870182613aed565b9550506020938401939190910190600101613ca0565b5f60208284031215613d2c575f80fd5b813561ffff811681146134c4575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613ae1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452613df785835161398f565b94506020938401939190910190600101613dbd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613e5357613e53613d3d565b604052919050565b5f60208284031215613e6b575f80fd5b815167ffffffffffffffff811115613e81575f80fd5b8201601f81018413613e91575f80fd5b805167ffffffffffffffff811115613eab57613eab613d3d565b8060051b613ebb60208201613e0c565b91825260208184018101929081019087841115613ed6575f80fd5b6020850192505b83831015613f9657825167ffffffffffffffff811115613efb575f80fd5b8501603f81018913613f0b575f80fd5b602081015167ffffffffffffffff811115613f2857613f28613d3d565b613f5960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613e0c565b8181526040838301018b1015613f6d575f80fd5b8160408401602083015e5f60208383010152808552505050602082019150602083019250613edd565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461109e575f80fd5b5f60208284031215613fd2575f80fd5b81516134c481613fa1565b602081525f61401960208301600b81527f6572726f72537472696e67000000000000000000000000000000000000000000602082015260400190565b92915050565b602081525f6134c4602083018461398f565b600181811c9082168061404557607f821691505b60208210810361407c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215614092575f80fd5b5051919050565b602081525f61401960208301601281527f5365636f6e642063616c6c206661696c65640000000000000000000000000000602082015260400190565b5f80604083850312156140e6575f80fd5b505080516020909101519092909150565b602081525f61401960208301601181527f46697273742063616c6c206661696c6564000000000000000000000000000000602082015260400190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561401957614019614133565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826141ae576141ae614173565b500490565b8082018082111561401957614019614133565b808202811582820484141761401957614019614133565b5f82518060208501845e5f920191825250919050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f614221604083018461398f565b949350505050565b5f8261423757614237614173565b500690565b604081525f61424e604083018561398f565b9050826020830152939250505056fe6080604052604051600e906056565b604051809103905ff0801580156026573d5f803e3d5ffd5b50600280546001600160a01b0319166001600160a01b03929092169190911790553480156051575f80fd5b506063565b6102d780610ac883390190565b610a58806100705f395ff3fe6080604052600436106100ef575f3560e01c80635170a9d011610087578063ac9650d811610057578063ac9650d8146102bc578063ad64e404146102dc578063ddf363d7146102e4578063fa6b6154146102f8575f80fd5b80635170a9d014610249578063580026801461025b5780636e8055c51461027a5780639c01753e1461029d575f80fd5b80633b16a6a3116100c25780633b16a6a31461019d5780633b83b70c146101f75780634ec951bb14610216578063510ccffe14610235575f80fd5b80630b9666ba146100f35780631438a8fa146101145780632071722414610128578063223612d314610147575b5f80fd5b3480156100fe575f80fd5b5061011261010d3660046106bf565b610300565b005b34801561011f575f80fd5b50610112610389565b348015610133575f80fd5b506101126101423660046107a1565b6103bb565b348015610152575f80fd5b506002546101739073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a8575f80fd5b506101dc6101b73660046106bf565b6040805180820182525f80825260209182015281518083019092529281529182015290565b60408051825181526020928301519281019290925201610194565b348015610202575f80fd5b506101126102113660046107a1565b610440565b348015610221575f80fd5b506101126102303660046107a1565b61047d565b348015610240575f80fd5b506101126104b1565b348015610254575f80fd5b5033610173565b348015610266575f80fd5b506101126102753660046106bf565b61052e565b348015610285575f80fd5b5061028f60015481565b604051908152602001610194565b3480156102a8575f80fd5b506101126102b73660046107ee565b61056a565b6102cf6102ca366004610815565b6105a1565b60405161019491906108d2565b6101126106af565b3480156102ef575f80fd5b5061028f5f5481565b610112345f55565b6002546040517fbafcdb49000000000000000000000000000000000000000000000000000000008152600481018490526024810183905273ffffffffffffffffffffffffffffffffffffffff9091169063bafcdb49906044015f6040518083038186803b15801561036f575f80fd5b505afa158015610381573d5f803e3d5ffd5b505050505050565b6040517fa55c4f1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f698a2e7600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063698a2e7690610411908490600401610953565b5f6040518083038186803b158015610427575f80fd5b505afa158015610439573d5f803e3d5ffd5b5050505050565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104749190610953565b60405180910390fd5b806040517f2dea06070000000000000000000000000000000000000000000000000000000081526004016104749190610953565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639bac78156040518163ffffffff1660e01b81526004015f6040518083038186803b158015610516575f80fd5b505afa158015610528573d5f803e3d5ffd5b50505050565b6040517f251d66070000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610474565b6040517fd04addd700000000000000000000000000000000000000000000000000000000815260ff82166004820152602401610474565b60608167ffffffffffffffff8111156105bc576105bc6106df565b6040519080825280602002602001820160405280156105ef57816020015b60608152602001906001900390816105da5790505b5090505f5b828110156106a8575f803086868581811061061157610611610965565b90506020028101906106239190610992565b6040516106319291906109fa565b5f60405180830381855af49150503d805f8114610669576040519150601f19603f3d011682016040523d82523d5f602084013e61066e565b606091505b50915091508161068057805160208201fd5b8084848151811061069357610693610965565b602090810291909101015250506001016105f4565b5092915050565b6106ba346002610a09565b600155565b5f80604083850312156106d0575f80fd5b50508035926020909101359150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8067ffffffffffffffff841115610726576107266106df565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610773576107736106df565b60405283815290508082840185101561078a575f80fd5b838360208301375f60208583010152509392505050565b5f602082840312156107b1575f80fd5b813567ffffffffffffffff8111156107c7575f80fd5b8201601f810184136107d7575f80fd5b6107e68482356020840161070c565b949350505050565b5f602082840312156107fe575f80fd5b813560ff8116811461080e575f80fd5b9392505050565b5f8060208385031215610826575f80fd5b823567ffffffffffffffff81111561083c575f80fd5b8301601f8101851361084c575f80fd5b803567ffffffffffffffff811115610862575f80fd5b8560208260051b8401011115610876575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015610947577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452610932858351610886565b945060209384019391909101906001016108f8565b50929695505050505050565b602081525f61080e6020830184610886565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126109c5575f80fd5b83018035915067ffffffffffffffff8211156109df575f80fd5b6020019150368190038213156109f3575f80fd5b9250929050565b818382375f9101908152919050565b8082028115828204841417610a45577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9291505056fea164736f6c634300081a000a6080604052348015600e575f80fd5b506102bb8061001c5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c8063698a2e76146100435780639bac781514610058578063bafcdb4914610060575b5f80fd5b61005661005136600461014b565b610073565b005b6100566100b0565b61005661006e36600461023b565b6100e2565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100a7919061025b565b60405180910390fd5b6040517fd845fc9200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9407b1cb00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016100a7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6020828403121561015b575f80fd5b813567ffffffffffffffff811115610171575f80fd5b8201601f81018413610181575f80fd5b803567ffffffffffffffff81111561019b5761019b61011e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156102075761020761011e565b60405281815282820160200186101561021e575f80fd5b816020840160208301375f91810160200191909152949350505050565b5f806040838503121561024c575f80fd5b50