UNPKG

@uniswap/v4-periphery

Version:

🦄 Peripheral smart contracts for interacting with Uniswap v4

1 lines • 831 kB
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_SCRIPT","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"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":"_WETH9","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IWETH9"}],"stateMutability":"view"},{"type":"function","name":"deployAndApprovePosm","inputs":[{"name":"poolManager","type":"address","internalType":"contract IPoolManager"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deployPermit2","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployPosmHookModifyLiquidities","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deployPosmHookSavesDelta","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"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":"positionDescriptor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPositionDescriptor"}],"stateMutability":"view"},{"type":"function","name":"run","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"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_collect_6909","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_collect_donate","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_collect_donate_sameRange","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_collect_sameRange_6909","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_decreaseLiquidity_sameRange_exact","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_collect_erc20","inputs":[{"name":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_collect_sameRange_erc20","inputs":[{"name":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"liquidityDeltaBob","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_getFeesOwed_donate","inputs":[{"name":"feeRevenue0","type":"uint256","internalType":"uint256"},{"name":"feeRevenue1","type":"uint256","internalType":"uint256"}],"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":"0x600c805460ff199081166001908117909255601f80548216831790556077196080819052607860a0819052670de0b6b3a764000060c08190525f60e0819052602080546378ffff8865ffffffffffff19918216811790925560219390935560228290556101009490945261012092909252670de0b6b3a763ffff196101408190526101608390526023805490921690931790556024919091556025556101e06040526101808290526063196101a08190526bb504f333f9de6484597d89b36101c0819052602680549093168417909255602755602880546001600160a01b0319908116909217905560428054909116600e17905560438054614000600160a11b036001600160a81b031990911617905561011a904290610355565b604555604b80546001600160a01b03191661050017905560405161013d90610347565b604051809103905ff080158015610156573d5f803e3d5ffd5b50604c80546001600160a01b03929092166001600160a01b0319928316179055604e8054821661abcd17905560508054909116610f80179055604080518082019091526005815264414c49434560d81b60208201526101b490610228565b605580546001600160a01b0319166001600160a01b03929092169190911790556040805180820190915260038152622127a160e91b60208201526101f790610228565b605680546001600160a01b0319166001600160a01b0392909216919091179055348015610222575f80fd5b50610401565b5f61023282610239565b5092915050565b5f808260405160200161024c919061037a565b60408051808303601f190181529082905280516020909101206001625e79b760e01b03198252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa1580156102b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d99190610390565b6040516318caf8e360e31b8152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c7189061031590859087906004016103bd565b5f604051808303815f87803b15801561032c575f80fd5b505af115801561033e573d5f803e3d5ffd5b50505050915091565b61121e80620267a283390190565b8082018082111561037457634e487b7160e01b5f52601160045260245ffd5b92915050565b5f82518060208501845e5f920191825250919050565b5f602082840312156103a0575f80fd5b81516001600160a01b03811681146103b6575f80fd5b9392505050565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b6202639280620004105f395ff3fe608060405260043610610212575f3560e01c806393ad73ed11610117578063ba414fa6116100ac578063cb6953901161007c578063e6a0e18a11610062578063e6a0e18a146105f5578063f8ccbf4714610609578063fa7626d41461063a575f80fd5b8063cb695390146105cd578063e20c9f71146105e1575f80fd5b8063ba414fa61461056d578063c040622614610591578063c7b8e15d146105a5578063c9ec1872146105b9575f80fd5b8063b0464fdc116100e7578063b0464fdc146104bc578063b1a73b8a146104d0578063b5508aa91461053a578063b674dc951461054e575f80fd5b806393ad73ed146104705780639627d59d1461049d5780639e07ec51146104a8578063afd8d35f1461049d575f80fd5b80633e5e3c23116101a757806366d9a9a011610177578063815963121161015d578063815963121461041a57806385226c811461042e578063916a17c61461044f575f80fd5b806366d9a9a0146103e557806367382c0514610406575f80fd5b80633e5e3c231461037d5780633f7286f414610391578063542524dd146103a557806363e8f728146103b9575f80fd5b80631f99cc7c116101e25780631f99cc7c146102c95780632ade3880146102e85780632d6d05501461030957806339cd201314610328575f80fd5b806303ef31f61461021d5780630a9254e41461023e578063106d0231146102525780631ed7831c146102a8575f80fd5b3661021957005b5f80fd5b348015610228575f80fd5b5061023c61023736600461863a565b610653565b005b348015610249575f80fd5b5061023c610667565b34801561025d575f80fd5b5060475461027e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102b3575f80fd5b506102bc610893565b60405161029f9190618655565b3480156102d4575f80fd5b5061023c6102e33660046187ad565b610900565b3480156102f3575f80fd5b506102fc61150f565b60405161029f919061889a565b348015610314575f80fd5b5061023c610323366004618948565b611658565b348015610333575f80fd5b5060235460245460255461035592600281810b936301000000909204900b9184565b60408051600295860b81529390940b602084015292820152606081019190915260800161029f565b348015610388575f80fd5b506102bc611a2c565b34801561039c575f80fd5b506102bc611a97565b3480156103b0575f80fd5b5061027e611b02565b3480156103c4575f80fd5b50604d5461027e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f0575f80fd5b506103f9611b24565b60405161029f91906189be565b348015610411575f80fd5b5061023c611c9d565b348015610425575f80fd5b5061023c611db1565b348015610439575f80fd5b50610442612b71565b60405161029f9190618a5a565b34801561045a575f80fd5b50610463612c3c565b60405161029f9190618a6c565b34801561047b575f80fd5b5060205460215460225461035592600281810b936301000000909204900b9184565b34801561023c575f80fd5b3480156104b3575f80fd5b5061023c612d3f565b3480156104c7575f80fd5b506104636137ca565b3480156104db575f80fd5b506026546027546028546105079260ff16919073ffffffffffffffffffffffffffffffffffffffff1683565b604080519315158452602084019290925273ffffffffffffffffffffffffffffffffffffffff169082015260600161029f565b348015610545575f80fd5b506104426138cd565b348015610559575f80fd5b5061023c610568366004618b0e565b613998565b348015610578575f80fd5b50610581613c45565b604051901515815260200161029f565b34801561059c575f80fd5b5061027e613d15565b3480156105b0575f80fd5b5061027e613ddb565b3480156105c4575f80fd5b5061027e613deb565b3480156105d8575f80fd5b5061023c613df9565b3480156105ec575f80fd5b506102bc613f7a565b348015610600575f80fd5b5061023c613fe5565b348015610614575f80fd5b506043546105819074010000000000000000000000000000000000000000900460ff1681565b348015610645575f80fd5b50601f546105819060ff1681565b61065c81614353565b6106646144f6565b50565b61066f61453a565b610677614b23565b5050610681611c9d565b602954602a54604a546106c19273ffffffffffffffffffffffffffffffffffffffff9081169281169116610bb86c01000000000000000000000000614ba4565b6054558051603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155602083015160378054604086015160608701519386167fffffffffffffffffff0000000000000000000000000000000000000000000000909216919091177401000000000000000000000000000000000000000062ffffff9283168102919091177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff1677010000000000000000000000000000000000000000000000948316949094029390931791829055608090950151603880549094169416939093179091556107e492910416670de0b6b3a7640000620f4240614d00565b605755602b546108099073ffffffffffffffffffffffffffffffffffffffff16610653565b60555461082b9073ffffffffffffffffffffffffffffffffffffffff16614d3a565b60565461084d9073ffffffffffffffffffffffffffffffffffffffff16614d3a565b60555461086f9073ffffffffffffffffffffffffffffffffffffffff16614e87565b6056546108919073ffffffffffffffffffffffffffffffffffffffff16614e87565b565b606060168054806020026020016040519081016040528092919081815260200182805480156108f657602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116108cb575b5050505050905090565b6109218260400151678ac7230489e8000069021e19e0c9bab2400000614f84565b604080840191909152805160a08101825260365473ffffffffffffffffffffffffffffffffffffffff9081168252603754808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b606082015260385490911660808201526109c590836c01000000000000000000000000615080565b91507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff16634c63e5625f845f015160020b128015610a205750836020015160020b5f125b6040518263ffffffff1660e01b8152600401610a40911515815260200190565b5f6040518083038186803b158015610a56575f80fd5b505afa158015610a68573d5f803e3d5ffd5b50505050610a8a8168056bc75e2d6310000069152d02c7e14af68000006150f2565b604080516101008101825260365473ffffffffffffffffffffffffffffffffffffffff90811660608301908152603754808316608085015274010000000000000000000000000000000000000000810462ffffff1660a0850152770100000000000000000000000000000000000000000000009004600290810b60c0850152603854831660e08501529083528651810b602080850191909152870151900b8284015260555492517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b158015610b94575f80fd5b505af1158015610ba6573d5f803e3d5ffd5b505050505f60445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c399190618b2e565b6040850151605554919250610c939184919073ffffffffffffffffffffffffffffffffffffffff165f5b6040519080825280601f01601f191660200182016040528015610c8d576020820181803683370190505b5061513f565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610cfa575f80fd5b505af1158015610d0c573d5f803e3d5ffd5b50506056546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d5691506024015f604051808303815f87803b158015610d8c575f80fd5b505af1158015610d9e573d5f803e3d5ffd5b505050505f60445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e319190618b2e565b605654909150610e5b908490869073ffffffffffffffffffffffffffffffffffffffff165f610c63565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610ec2575f80fd5b505af1158015610ed4573d5f803e3d5ffd5b50506040805160a08101825260365473ffffffffffffffffffffffffffffffffffffffff9081168252603754808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b60608201526038549091166080820152662386f26fc100009250610f8791505f610f7484618b72565b604080515f8152602081019091526151dd565b506055546029545f91610fb39173ffffffffffffffffffffffffffffffffffffffff90811691166153de565b605554602a549192505f91610fe19173ffffffffffffffffffffffffffffffffffffffff91821691166153de565b6055546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b158015611060575f80fd5b505af1158015611072573d5f803e3d5ffd5b506110b092508791508890505f5b6040519080825280601f01601f1916602001820160405280156110aa576020820181803683370190505b506154af565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611117575f80fd5b505af1158015611129573d5f803e3d5ffd5b505050505f611136615541565b6055546029549192505f916111649173ffffffffffffffffffffffffffffffffffffffff91821691166153de565b605554602a549192505f916111929173ffffffffffffffffffffffffffffffffffffffff91821691166153de565b905061119e8583615645565b6111cc6111ab84600f0b90565b6fffffffffffffffffffffffffffffffff166111c78684618ba8565b615645565b6111e36111d984600f0b90565b600f0b15156156c9565b6056546029545f9161120e9173ffffffffffffffffffffffffffffffffffffffff90811691166153de565b605654602a549192505f9161123c9173ffffffffffffffffffffffffffffffffffffffff91821691166153de565b6056546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b1580156112bb575f80fd5b505af11580156112cd573d5f803e3d5ffd5b506112df92508b91508d90505f611080565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611346575f80fd5b505af1158015611358573d5f803e3d5ffd5b50505050611364615541565b6056546029549196505f916113929173ffffffffffffffffffffffffffffffffffffffff91821691166153de565b605654602a549192505f916113c09173ffffffffffffffffffffffffffffffffffffffff91821691166153de565b90506113cc8483615645565b6113f56113d988600f0b90565b6fffffffffffffffffffffffffffffffff166111c78584618ba8565b6114026111d988600f0b90565b602b546044546029546114c99273ffffffffffffffffffffffffffffffffffffffff9081169262fdd58e9290821691165b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381865afa15801561149f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c39190618b2e565b5f615645565b602b54604454602a546114fe9273ffffffffffffffffffffffffffffffffffffffff9081169262fdd58e929082169116611433565b505050505050505050505050505050565b6060601e805480602002602001604051908101604052809291908181526020015f905b8282101561164f575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611638578382905f5260205f200180546115ad90618bbb565b80601f01602080910402602001604051908101604052809291908181526020018280546115d990618bbb565b80156116245780601f106115fb57610100808354040283529160200191611624565b820191905f5260205f20905b81548152906001019060200180831161160757829003601f168201915b505050505081526020019060010190611590565b505050508152505081526020019060010190611532565b50505050905090565b6116798160400151678ac7230489e8000069021e19e0c9bab2400000614f84565b604082810191909152604454815160a08101835260365473ffffffffffffffffffffffffffffffffffffffff908116825260375480821660208085019190915274010000000000000000000000000000000000000000820462ffffff16848701527701000000000000000000000000000000000000000000000090910460020b60608401526038548216608084015284515f80825291810190955293611736939190911691309186906c010000000000000000000000009061573e565b8051909350909150737109709ecfa91a80626ff3989d68f67f5b1dd12d90634c63e562905f60029190910b1280156117745750836020015160020b5f125b6040518263ffffffff1660e01b8152600401611794911515815260200190565b5f6040518083038186803b1580156117aa575f80fd5b505afa1580156117bc573d5f803e3d5ffd5b5050604080516101008101825260365473ffffffffffffffffffffffffffffffffffffffff9081166060808401828152603754808516608080880182905262ffffff7401000000000000000000000000000000000000000084041660a0808a0182905277010000000000000000000000000000000000000000000000909404600290810b60c08b0181905260385490991660e08b01819052958a528e51810b6020808c01919091528f81015190910b8a8c01528a519485018b52968452958301919091529681019390935290820192909252928301529250662386f26fc1000091506118ac905f610f7484618b72565b50602b546044545f916118da9173ffffffffffffffffffffffffffffffffffffffff908116911685876158cd565b6029549091505f906119019073ffffffffffffffffffffffffffffffffffffffff1661597b565b602a549091505f906119289073ffffffffffffffffffffffffffffffffffffffff1661597b565b905061193586865f611080565b5f61193e615541565b905061196c61194d82600f0b90565b600f0b61196560575488615a2f90919063ffffffff16565b6001615a43565b61198e61197982600f0b90565b600f0b61198686600f0b90565b600f0b615645565b6119a861199b8260801d90565b600f0b6119868660801d90565b6119ea6119b58260801d90565b602954600f9190910b9085906119e09073ffffffffffffffffffffffffffffffffffffffff1661597b565b6111c79190618ba8565b611a226119f782600f0b90565b602a54600f9190910b9084906119e09073ffffffffffffffffffffffffffffffffffffffff1661597b565b5050505050505050565b606060188054806020026020016040519081016040528092919081815260200182805480156108f657602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116108cb575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156108f657602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116108cb575050505050905090565b611b21600173fffd8963efd1fc6a506488495d951d5263988d26618c0c565b81565b6060601b805480602002602001604051908101604052809291908181526020015f905b8282101561164f578382905f5260205f2090600202016040518060400160405290815f82018054611b7790618bbb565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba390618bbb565b8015611bee5780601f10611bc557610100808354040283529160200191611bee565b820191905f5260205f20905b815481529060010190602001808311611bd157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c8557602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611c325790505b50505050508152505081526020019060010190611b47565b5f604051611caa90618563565b604051809103905ff080158015611cc3573d5f803e3d5ffd5b50604b546040805173ffffffffffffffffffffffffffffffffffffffff808516803b8381016020908101909552808452959650737109709ecfa91a80626ff3989d68f67f5b1dd12d9563b4d6c78295909216935f91908401903c6040518363ffffffff1660e01b8152600401611d3a929190618c38565b5f604051808303815f87803b158015611d51575f80fd5b505af1158015611d63573d5f803e3d5ffd5b5050604b54604a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055505050565b604080516101008101825260365473ffffffffffffffffffffffffffffffffffffffff90811660608301908152603754808316608085015262ffffff7401000000000000000000000000000000000000000082041660a085015277010000000000000000000000000000000000000000000000900460020b60c0840152603854821660e084015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8860208084019190915260788385015260445484517f75794a3c0000000000000000000000000000000000000000000000000000000081529451939468a2a15d09519be0000094683635c9adc5dea00000945f949316926375794a3c92600480820193918290030181865afa158015611ed5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef99190618b2e565b6055546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b158015611f78575f80fd5b505af1158015611f8a573d5f803e3d5ffd5b5050605554611fb59250869150859073ffffffffffffffffffffffffffffffffffffffff165f610c63565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561201c575f80fd5b505af115801561202e573d5f803e3d5ffd5b505050505f61203b615541565b90505f60445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120cc9190618b2e565b6056546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b15801561214b575f80fd5b505af115801561215d573d5f803e3d5ffd5b50506056546121889250889150869073ffffffffffffffffffffffffffffffffffffffff165f610c63565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156121ef575f80fd5b505af1158015612201573d5f803e3d5ffd5b505050505f61220e615541565b6040805160a08101825260365473ffffffffffffffffffffffffffffffffffffffff9081168252603754808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b6060820152603854909116608082015290915066038d7ea4c68000906122ae906001610f7484618b72565b506040805160a08101825260365473ffffffffffffffffffffffffffffffffffffffff9081168252603754808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b60608201526038549091166080820152612342905f610f7484618b72565b506029546055546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152633b9aca00925f9216906370a0823190602401602060405180830381865afa1580156123ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123de9190618b2e565b602a546055546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293505f929116906370a0823190602401602060405180830381865afa158015612453573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124779190618b2e565b6055546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b1580156124f6575f80fd5b505af1158015612508573d5f803e3d5ffd5b5061254792508a91508d90508c5f5b6040519080825280601f01601f191660200182016040528015612541576020820181803683370190505b50615ac5565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156125ae575f80fd5b505af11580156125c0573d5f803e3d5ffd5b50506029546055546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526126b194508693509116906370a0823190602401602060405180830381865afa15801561263a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061265e9190618b2e565b6126689190618ba8565b61268b8c6126768d82618c66565b605754612684908a90615a2f565b9190614d00565b6126958a60801d90565b61269e90618c79565b600f0b6126ab9190618c66565b85615a43565b602a546055546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261276c92849216906370a0823190602401602060405180830381865afa158015612726573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274a9190618b2e565b6127549190618ba8565b6127628c6126768d82618c66565b6126958a600f0b90565b50506029546056546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201525f9291909116906370a0823190602401602060405180830381865afa1580156127e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128069190618b2e565b602a546056546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293505f929116906370a0823190602401602060405180830381865afa15801561287b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061289f9190618b2e565b6056546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b15801561291e575f80fd5b505af1158015612930573d5f803e3d5ffd5b5050505061294c868c60028c6129469190618ce2565b5f612517565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156129b3575f80fd5b505af11580156129c5573d5f803e3d5ffd5b50506029546056546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152612aa794508693509116906370a0823190602401602060405180830381865afa158015612a3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a639190618b2e565b612a6d9190618ba8565b612a7b8b612676818f618c66565b6002612a878960801d90565b612a9090618c79565b600f0b612a9d9190618cf5565b6126ab9190618c66565b602a546056546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152612b6492849216906370a0823190602401602060405180830381865afa158015612b1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b409190618b2e565b612b4a9190618ba8565b612b588b612676818f618c66565b6002612a8789600f0b90565b5050505050505050505050565b6060601a805480602002602001604051908101604052809291908181526020015f905b8282101561164f578382905f5260205f20018054612bb190618bbb565b80601f0160208091040260200160405190810160405280929190818152602001828054612bdd90618bbb565b8015612c285780601f10612bff57610100808354040283529160200191612c28565b820191905f5260205f20905b815481529060010190602001808311612c0b57829003601f168201915b505050505081526020019060010190612b94565b6060601d805480602002602001604051908101604052809291908181526020015f905b8282101561164f575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939491938583019392830182828015612d2757602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612cd45790505b50505050508152505081526020019060010190612c5f565b604080516101008101825260365473ffffffffffffffffffffffffffffffffffffffff90811660608301908152603754808316608085015274010000000000000000000000000000000000000000810462ffffff1660a085015277010000000000000000000000000000000000000000000000900460020b60c0840152603854821660e084015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88602083015260788284015260555492517f06447d56000000000000000000000000000000000000000000000000000000008152921660048301529068a2a15d09519be0000090683635c9adc5dea0000090737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b158015612e70575f80fd5b505af1158015612e82573d5f803e3d5ffd5b505050505f60445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f159190618b2e565b605554909150612f3f908590859073ffffffffffffffffffffffffffffffffffffffff165f610c63565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612fa6575f80fd5b505af1158015612fb8573d5f803e3d5ffd5b50506056546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d5691506024015f604051808303815f87803b158015613038575f80fd5b505af115801561304a573d5f803e3d5ffd5b505050505f60445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130dd9190618b2e565b605654909150613107908690859073ffffffffffffffffffffffffffffffffffffffff165f610c63565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561316e575f80fd5b505af1158015613180573d5f803e3d5ffd5b5050603054670de0b6b3a7640000925067016345785d8a0000915073ffffffffffffffffffffffffffffffffffffffff1663234266d7603684845f6040519080825280601f01601f1916602001820160405280156131e5576020820181803683370190505b506040518563ffffffff1660e01b81526004016132059493929190618d5c565b6020604051808303815f875af1158015613221573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132459190618b2e565b50602b546044545f916132739173ffffffffffffffffffffffffffffffffffffffff90811691168a886158cd565b90506132aa6132828260801d90565b6fffffffffffffffffffffffffffffffff16611965896132a28a82618c66565b879190614d00565b6132df6132b782600f0b90565b6fffffffffffffffffffffffffffffffff16611965896132d78a82618c66565b869190614d00565b6055546029545f9161330a9173ffffffffffffffffffffffffffffffffffffffff90811691166153de565b605554602a549192505f916133389173ffffffffffffffffffffffffffffffffffffffff91821691166153de565b6055546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b1580156133b7575f80fd5b505af11580156133c9573d5f803e3d5ffd5b506133db92508991508c90505f611080565b5f6133e4615541565b90507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561344d575f80fd5b505af115801561345f573d5f803e3d5ffd5b505050506134856134708260801d90565b600f0b61347d8660801d90565b600f0b615ad2565b61349f61349282600f0b90565b600f0b61347d86600f0b90565b6055546029546134f2916134cc9173ffffffffffffffffffffffffffffffffffffffff90811691166153de565b6134d68660801d90565b6111c7906fffffffffffffffffffffffffffffffff1686618c66565b605554602a546135459161351f9173ffffffffffffffffffffffffffffffffffffffff90811691166153de565b61352986600f0b90565b6111c7906fffffffffffffffffffffffffffffffff1685618c66565b5050602b546044545f9350613576925073ffffffffffffffffffffffffffffffffffffffff90811691168a876158cd565b90506135a56135858260801d90565b6fffffffffffffffffffffffffffffffff16611965886132a2818c618c66565b6135d26135b282600f0b90565b6fffffffffffffffffffffffffffffffff16611965886132d7818c618c66565b6056546029545f916135fd9173ffffffffffffffffffffffffffffffffffffffff90811691166153de565b605654602a549192505f9161362b9173ffffffffffffffffffffffffffffffffffffffff91821691166153de565b6056546040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b1580156136aa575f80fd5b505af11580156136bc573d5f803e3d5ffd5b506136ce92508891508c90505f611080565b5f6136d7615541565b90507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613740575f80fd5b505af1158015613752573d5f803e3d5ffd5b505050506137636134708260801d90565b61377061349282600f0b90565b60565460295461379d916134cc9173ffffffffffffffffffffffffffffffffffffffff90811691166153de565b605654602a54612b649161351f9173ffffffffffffffffffffffffffffffffffffffff90811691166153de565b6060601c805480602002602001604051908101604052809291908181526020015f905b8282101561164f575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff1683526001810180548351818702810187019094528084529394919385830193928301828280156138b557602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116138625790505b505050505081525050815260200190600101906137ed565b60606019805480602002602001604051908101604052809291908181526020015f905b8282101561164f578382905f5260205f2001805461390d90618bbb565b80601f016020809104026020016040519081016040528092919081815260200182805461393990618bbb565b80156139845780601f1061395b57610100808354040283529160200191613984565b820191905f5260205f20905b81548152906001019060200180831161396757829003601f168201915b5050505050815260200190600101906138f0565b6139ae825f6a52b7d2dcc80cd2e40000006150f2565b91506139c6815f6a52b7d2dcc80cd2e40000006150f2565b604080516101008101825260365473ffffffffffffffffffffffffffffffffffffffff90811660608301908152603754808316608085015262ffffff7401000000000000000000000000000000000000000082041660a085015277010000000000000000000000000000000000000000000000900460020b60c0840152603854821660e084015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8860208084019190915260788385015260445484517f75794a3c000000000000000000000000000000000000000000000000000000008152945195965092945f9493909216926375794a3c92600480830193928290030181865afa158015613ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613afd9190618b2e565b9050613b1382678ac7230489e80000305f610c63565b60305473ffffffffffffffffffffffffffffffffffffffff1663234266d7603686865f6040519080825280601f01601f191660200182016040528015613b60576020820181803683370190505b506040518563ffffffff1660e01b8152600401613b809493929190618d5c565b6020604051808303815f875af1158015613b9c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bc09190618b2e565b50602b546044545f91613bee9173ffffffffffffffffffffffffffffffffffffffff908116911685856158cd565b9050613c17613bfd8260801d90565b6fffffffffffffffffffffffffffffffff16866001615a43565b613c3e613c2482600f0b90565b6fffffffffffffffffffffffffffffffff16856001615a43565b5050505050565b6008545f9060ff1615613c5c575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa158015613cea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d0e9190618b2e565b1415905090565b5f80604051806123e001604052806123c0815260200162023fc66123c091396040517fb4d6c782000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063b4d6c78290613d98906e22d473030f116ddee9f6b43ac78ba3908590600401618c38565b5f604051808303815f87803b158015613daf575f80fd5b505af1158015613dc1573d5f803e3d5ffd5b505050506e22d473030f116ddee9f6b43ac78ba391505090565b611b216401000276a36001618e13565b5f613df4613d15565b905090565b5f604051613e0690618571565b604051809103905ff080158015613e1f573d5f803e3d5ffd5b506050546040805173ffffffffffffffffffffffffffffffffffffffff808516803b8381016020908101909552808452959650737109709ecfa91a80626ff3989d68f67f5b1dd12d9563b4d6c78295909216935f91908401903c6040518363ffffffff1660e01b8152600401613e96929190618c38565b5f604051808303815f87803b158015613ead575f80fd5b505af1158015613ebf573d5f803e3d5ffd5b5050605054604f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155604480546046546040517f90107afe000000000000000000000000000000000000000000000000000000008152918516600483015290931660248401529093506390107afe9250015b5f604051808303815f87803b158015613f68575f80fd5b505af1158015613c3e573d5f803e3d5ffd5b606060158054806020026020016040519081016040528092919081815260200182805480156108f657602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116108cb575050505050905090565b604080516101008101825260365473ffffffffffffffffffffffffffffffffffffffff90811660608301908152603754808316608085015262ffffff7401000000000000000000000000000000000000000082041660a085015277010000000000000000000000000000000000000000000000900460020b60c0840152603854821660e084015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8860208084019190915260788385015260445484517f75794a3c000000000000000000000000000000000000000000000000000000008152945193945f9491909316926375794a3c9260048083019391928290030181865afa1580156140f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061411a9190618b2e565b905061413082678ac7230489e80000305f610c63565b603054604080515f815260208101918290527f234266d700000000000000000000000000000000000000000000000000000000909152670de0b6b3a76400009173ffffffffffffffffffffffffffffffffffffffff169063234266d7906141a1906036908590819060248101618d5c565b6020604051808303815f875af11580156141bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141e19190618b2e565b50602b546044545f9161420f9173ffffffffffffffffffffffffffffffffffffffff908116911686866158cd565b6029549091505f906142369073ffffffffffffffffffffffffffffffffffffffff1661597b565b602a549091505f9061425d9073ffffffffffffffffffffffffffffffffffffffff1661597b565b905061426a85875f611080565b5f614273615541565b905061428d6142828260801d90565b600f0b866001615a43565b61429a61428282600f0b90565b6142a76134708260801d90565b6142b461349282600f0b90565b6142ff6142c18260801d90565b6142dd906fffffffffffffffffffffffffffffffff1685618c66565b6029546111c79073ffffffffffffffffffffffffffffffffffffffff1661597b565b61434a61430c82600f0b90565b614328906fffffffffffffffffffffffffffffffff1684618c66565b602a546111c79073ffffffffffffffffffffffffffffffffffffffff1661597b565b50505050505050565b61435b613deb565b604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556143a8615b2a565b604d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055614417817f4554480000000000000000000000000000000000000000000000000000000000615c10565b604980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155604654604d5460408051808201909152600181527f030000000000000000000000000000000000000000000000000000000000000060208201526144ae94869493811693620186a0939092911690615d2e565b604480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6029546145189073ffffffffffffffffffffffffffffffffffffffff16615ede565b602a546108919073ffffffffffffffffffffffffffffffffffffffff16615ede565b61454261600e565b602b5460405173ffffffffffffffffffffffffffffffffffffffff9091169061456a9061857f565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff0801580156145a0573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b546040519116906145f49061858d565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff08015801561462a573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b5460405191169061467e9061859b565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff0801580156146b4573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690614708906185a9565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff08015801561473e573d5f803e3d5ffd5b50602d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690614792906185b7565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff0801580156147c8573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b546040519116906