UNPKG

@uniswap/v4-core

Version:

🦄 Core smart contracts of Uniswap v4

1 lines • 578 kB
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"MIN_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"REMOVE_LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"SWAP_PARAMS","inputs":[],"outputs":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"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_shouldSwapEqual","inputs":[{"name":"feeSeed","type":"uint24","internalType":"uint24"},{"name":"tickSpacingSeed","type":"int24","internalType":"int24"},{"name":"lowerTickUnsanitized","type":"int24","internalType":"int24"},{"name":"upperTickUnsanitized","type":"int24","internalType":"int24"},{"name":"liquidityDeltaUnbound","type":"int256","internalType":"int256"},{"name":"sqrtPriceX96seed","type":"int256","internalType":"int256"},{"name":"swapAmount","type":"int128","internalType":"int128"},{"name":"zeroForOne","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_shouldSwapEqualMultipleLP","inputs":[{"name":"feeSeed","type":"uint24","internalType":"uint24"},{"name":"tickSpacingSeed","type":"int24","internalType":"int24"},{"name":"liquidityParams","type":"tuple[]","internalType":"struct V3SwapTests.TightLiquidityParams[]","components":[{"name":"lowerTickUnsanitized","type":"int24","internalType":"int24"},{"name":"upperTickUnsanitized","type":"int24","internalType":"int24"},{"name":"liquidityDeltaUnbound","type":"int256","internalType":"int256"}]},{"name":"sqrtPriceX96seed","type":"int256","internalType":"int256"},{"name":"swapAmount","type":"int128","internalType":"int128"},{"name":"zeroForOne","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"uniswapV3MintCallback","inputs":[{"name":"amount0Owed","type":"uint256","internalType":"uint256"},{"name":"amount1Owed","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"uniswapV3SwapCallback","inputs":[{"name":"amount0Delta","type":"int256","internalType":"int256"},{"name":"amount1Delta","type":"int256","internalType":"int256"},{"name":"","type":"bytes","internalType":"bytes"}],"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":"0x60806040523461016457600160ff19600c541617600c55600160ff19601f541617601f555f606061002e610168565b607719815260786020820152670de0b6b3a7640000604082015201526378ffff8865ffffffffffff196020541617602055670de0b6b3a76400006021555f6022555f606061007a610168565b607719815260786020820152670de0b6b3a763ffff19604082015201526378ffff8865ffffffffffff196023541617602355670de0b6b3a763ffff196024555f6025556040516060810181811060018060401b038211176101505760409081526001808352606319602084018190526bb504f333f9de6484597d89b39383018490526026805460ff1916909217909155602755602880546001600160a01b03199081169093179055604280548316600e17905560438054909216614000600160a01b0317909155516201be6e9081620001888239f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b60405190608082016001600160401b038111838210176101505760405256fe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c80630a9254e4146101795780631ed7831c146101745780632ade38801461016f57806339cd20131461016a5780633e5e3c23146101655780633f7286f414610160578063542524dd1461015b57806360a2b9531461015657806366d9a9a01461015157806385226c811461014c578063916a17c61461014757806393ad73ed14610142578063996547d91461013d578063b0464fdc14610138578063b1a73b8a14610133578063b5508aa91461012e578063ba414fa614610129578063c7b8e15d14610124578063d34879971461011f578063e20c9f711461011a578063fa461e33146101155763fa7626d40361000e576116d4565b61161d565b611575565b6114d8565b61146c565b61142a565b611381565b61131a565b611244565b611131565b610fc0565b610eea565b610d9d565b610c59565b6108c9565b610836565b610722565b61067a565b61061a565b610544565b610335565b61018c565b5f91031261018857565b5f80fd5b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610188576040517f16ed7bc400000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746573742f62696e2f7633466163746f72792e62797465636f6465000000000060448201525f81606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156102e1576102af91610268915f916102bf575b506020815191015ff073ffffffffffffffffffffffffffffffffffffffff1690565b7fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f55565b6102b7612020565b610018612774565b6102db91503d805f833e6102d3818361108e565b810190611f84565b5f610246565b611e75565b60206040818301928281528451809452019201905f5b8181106103095750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016102fc565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101885760405180602060165491828152019060165f527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289905f5b8181106103c1576103bd856103b18187038261108e565b604051918291826102e6565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161039a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b602081016020825282518091526040820190602060408260051b8501019401915f905b82821061046257505050505090565b9091929395947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08782030182528451906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b8501019401925f5b8281106104fb57505050505060208060019296019201920190929195939495610453565b9091929394602080610537837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0876001960301895289516103ed565b97019501939291016104d7565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018857601e5461057e81611119565b9061058c604051928361108e565b80825260208201601e5f527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3505f915b8383106105d057604051806103bd8782610430565b600260206001926040516105e381611051565b73ffffffffffffffffffffffffffffffffffffffff8654168152610608858701611812565b838201528152019201920191906105bb565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101885760235460245460255460408051600285810b825260189590951c90940b60208501528301919091526060820152608090f35b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101885760405180602060185491828152019060185f527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e905f5b8181106106f6576103bd856103b18187038261108e565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016106df565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101885760405180602060175491828152019060175f527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15905f5b81811061079e576103bd856103b18187038261108e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610787565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9073ffffffffffffffffffffffffffffffffffffffff8091169116039073ffffffffffffffffffffffffffffffffffffffff821161083157565b6107ca565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018857602073fffd8963efd1fc6a506488495d951d5263988d25604051908152f35b6004359062ffffff8216820361018857565b8060020b0361018857565b6084359081600f0b820361018857565b8015150361018857565b60a435906108c7826108b0565b565b34610188576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018857610901610883565b6024359061090e82610895565b60443561091a81610895565b6064359061092782610895565b60843560a4359060c4359283600f0b84036101885761095961098e9361097d9860e435986109548a6108b0565b612934565b93919890966109736109696110de565b94859060020b9052565b60020b6020840152565b60408201525f606082015284613cba565b9261099a845160020b90565b60406109aa602087015160020b90565b6109cf6109ba83890151600f0b90565b6fffffffffffffffffffffffffffffffff1690565b82517f3c8a7d8d000000000000000000000000000000000000000000000000000000008152306004820152600294850b60248201529190930b60448201526fffffffffffffffffffffffffffffffff909216606483015260a060848301525f60a4830152818060c4810103815f73ffffffffffffffffffffffffffffffffffffffff8b165af180156102e1575f95602092610adc92610b39575b50610aa5610a8c602c5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b906040519788809481937f5a6bcfda0000000000000000000000000000000000000000000000000000000083528a60048401612d57565b03925af19283156102e15761001895610b0595610afe95610b0a575b50612fd0565b919061336a565b61336a565b610b2b9060203d602011610b32575b610b23818361108e565b810190611e66565b505f610af8565b503d610b19565b610b5a9060403d604011610b60575b610b52818361108e565b810190612d41565b50610a69565b503d610b48565b90602080835192838152019201905f5b818110610b845750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101610b77565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310610bee57505050505090565b9091929394602080610c4a837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289519083610c3a83516040845260408401906103ed565b9201519084818403910152610b67565b97019301930191939290610bdf565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018857601b54610c9381611119565b90610ca1604051928361108e565b80825260208201601b5f527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc15f915b838310610ce557604051806103bd8782610bbc565b60026020600192604051610cf881611051565b610d0186611714565b8152610d0e858701611867565b83820152815201920192019190610cd0565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310610d5257505050505090565b9091929394602080610d8e837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516103ed565b97019301930191939290610d43565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018857601a54610dd781611119565b90610de5604051928361108e565b808252601a5f9081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310610e2957604051806103bd8782610d20565b600160208192610e3885611714565b815201920192019190610e14565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310610e7857505050505090565b9091929394602080610edb837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190610b67565b97019301930191939290610e69565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018857601d54610f2481611119565b90610f32604051928361108e565b80825260208201601d5f527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f5f915b838310610f7657604051806103bd8782610e46565b60026020600192604051610f8981611051565b73ffffffffffffffffffffffffffffffffffffffff8654168152610fae858701611867565b83820152815201920192019190610f61565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610188576020805460215460225460408051600285810b825260189590951c90940b94840194909452928201526060810191909152608090f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761106d57604052565b611024565b6060810190811067ffffffffffffffff82111761106d57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761106d57604052565b604051906108c760a08361108e565b604051906108c760808361108e565b604051906108c760608361108e565b604051906108c760408361108e565b906108c7604051928361108e565b67ffffffffffffffff811161106d5760051b60200190565b346101885760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018857611168610883565b6024359061117582610895565b6044359167ffffffffffffffff83116101885736602384011215610188578260040135926111a284611119565b906111b0604051928361108e565b848252602460606020840196028201019036821161018857602401945b8186106111f65750610018945050606435906111e76108a0565b926111f06108ba565b94611c62565b60608636031261018857602060609160405161121181611072565b883561121c81610895565b81528289013561122b81610895565b83820152604089013560408201528152019501946111cd565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018857601c5461127e81611119565b9061128c604051928361108e565b80825260208201601c5f527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2115f915b8383106112d057604051806103bd8782610e46565b600260206001926040516112e381611051565b73ffffffffffffffffffffffffffffffffffffffff8654168152611308858701611867565b838201528152019201920191906112bb565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018857606060ff6026541660275473ffffffffffffffffffffffffffffffffffffffff6028541690604051921515835260208301526040820152f35b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610188576019546113bb81611119565b906113c9604051928361108e565b80825260195f9081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061140d57604051806103bd8782610d20565b60016020819261141c85611714565b8152019201920191906113f8565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610188576020611462611e80565b6040519015158152f35b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101885760206401000276a4604051908152f35b9181601f840112156101885782359167ffffffffffffffff8311610188576020838186019501011161018857565b346101885760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101885760043560243560443567ffffffffffffffff811161018857610018926115346115569236906004016114aa565b505073ffffffffffffffffffffffffffffffffffffffff6029541633906133ea565b3373ffffffffffffffffffffffffffffffffffffffff602a54166133ea565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101885760405180602060155491828152019060155f527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475905f5b8181106115f1576103bd856103b18187038261108e565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016115da565b346101885760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101885760243560043560443567ffffffffffffffff8111610188576116729036906004016114aa565b50505f81136116aa575b505f811361168657005b6100189073ffffffffffffffffffffffffffffffffffffffff602a541633906133ea565b6116ce9073ffffffffffffffffffffffffffffffffffffffff6029541633906133ea565b5f61167c565b34610188575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018857602060ff601f54166040519015158152f35b90604051915f8154908160011c9260018316908115611808575b6020851082146117db578487528693602085019290811561179f5750600114611760575b50506108c79250038361108e565b61176f9192505f5260205f2090565b905f915b84831061178857506108c79350015f80611752565b805482840152869350602090920191600101611773565b90506108c7959293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168252151560051b015f80611752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f169361172e565b90815461181e81611119565b9261182c604051948561108e565b81845260208401905f5260205f205f915b83831061184a5750505050565b60016020819261185985611714565b81520192019201919061183d565b6040518154808252909291839061188560208301915f5260205f2090565b925f905b806007830110611a91576108c7945491818110611a55575b818110611a1e575b8181106119e7575b8181106119b0575b818110611979575b818110611942575b81811061190c575b106118df575b50038361108e565b7fffffffff000000000000000000000000000000000000000000000000000000001681526020015f6118d7565b602083811b7fffffffff0000000000000000000000000000000000000000000000000000000016855290936001910193016118d1565b604083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016118c9565b606083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016118c1565b608083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016118b9565b60a083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016118b1565b60c083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016118a9565b92602081611a896001938660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b0193016118a1565b916008919350610100600191611c018754611ad0838260e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b60c081901b7fffffffff0000000000000000000000000000000000000000000000000000000016602084015260a081901b7fffffffff00000000000000000000000000000000000000000000000000000000166040840152608081901b7fffffffff00000000000000000000000000000000000000000000000000000000166060840152606081901b7fffffffff00000000000000000000000000000000000000000000000000000000166080840152604081901b7fffffffff000000000000000000000000000000000000000000000000000000001660a0840152602081901b7fffffffff000000000000000000000000000000000000000000000000000000001660c08401527fffffffff000000000000000000000000000000000000000000000000000000001660e0830152565b019401920185929391611889565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805115611c495760200190565b611c0f565b8051821015611c495760209160051b010190565b90611c6f92969391612934565b95919290935f5b8351811015611e505760148114611e5057611cdb88611c958387611c4e565b515160020b6020611ca68589611c4e565b51015160020b611cca6040611cbb878b611c4e565b510151916109736109696110de565b60408201525f606082015288613e27565b90611ce7825160020b90565b916040611cf8602083015160020b90565b611d086109ba83850151600f0b90565b82517f3c8a7d8d000000000000000000000000000000000000000000000000000000008152306004820152600296870b60248201529190950b60448201526fffffffffffffffffffffffffffffffff909416606485015260a060848501525f60a4850152838060c4810103815f73ffffffffffffffffffffffffffffffffffffffff8c165af19081156102e157611dfb93602092611e33575b50611dc4610a8c602c5473ffffffffffffffffffffffffffffffffffffffff1690565b895f6040518097819582947f5a6bcfda00000000000000000000000000000000000000000000000000000000845260048401612d57565b03925af19182156102e157600192611e15575b5001611c76565b611e2c9060203d8111610b3257610b23818361108e565b505f611e0e565b611e4a9060403d8111610b6057610b52818361108e565b50611da1565b50915094506108c793610b0593610afe93612fd0565b90816020910312610188575190565b6040513d5f823e3d90fd5b60085460ff168015611e8f5790565b506040517f667f9d7000000000000000000000000000000000000000000000000000000000815260208180600481017f6661696c65640000000000000000000000000000000000000000000000000000846040830192737109709ecfa91a80626ff3989d68f67f5b1dd12d815201520381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156102e1575f91611f2b575b50151590565b611f44915060203d602011610b3257610b23818361108e565b5f611f25565b67ffffffffffffffff811161106d57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6020818303126101885780519067ffffffffffffffff8211610188570181601f8201121561018857602081519101611fbb82611f4a565b92611fc9604051948561108e565b8284528282011161018857815f926020928386015e8301015290565b60405190611ff460408361108e565b600d82527f666565436f6e74726f6c6c6572000000000000000000000000000000000000006020830152565b6120286134b7565b602b5473ffffffffffffffffffffffffffffffffffffffff1660405190611bb98083019183831067ffffffffffffffff84111761106d57839261208b9262018618853973ffffffffffffffffffffffffffffffffffffffff909116815260200190565b03905ff080156102e1576120da9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602f541617602f55565b602b5473ffffffffffffffffffffffffffffffffffffffff1660405190610d6f8083019183831067ffffffffffffffff84111761106d57839261213d926201b0f3853973ffffffffffffffffffffffffffffffffffffffff909116815260200190565b03905ff080156102e15761218c9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602e541617602e55565b602b5473ffffffffffffffffffffffffffffffffffffffff16604051906118358083019183831067ffffffffffffffff84111761106d5783926121ef9262010cfa853973ffffffffffffffffffffffffffffffffffffffff909116815260200190565b03905ff080156102e15761223e9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602c541617602c55565b602b5473ffffffffffffffffffffffffffffffffffffffff16604051906113158083019183831067ffffffffffffffff84111761106d5783926122a1926201252f853973ffffffffffffffffffffffffffffffffffffffff909116815260200190565b03905ff080156102e1576122f09073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602d541617602d55565b602b5473ffffffffffffffffffffffffffffffffffffffff16604051906112d28083019183831067ffffffffffffffff84111761106d578392612353926200fa28853973ffffffffffffffffffffffffffffffffffffffff909116815260200190565b03905ff080156102e1576123a29073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006030541617603055565b602b5473ffffffffffffffffffffffffffffffffffffffff1660405190610f228083019183831067ffffffffffffffff84111761106d578392612405926201a1d1853973ffffffffffffffffffffffffffffffffffffffff909116815260200190565b03905ff080156102e1576124549073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006031541617603155565b602b5473ffffffffffffffffffffffffffffffffffffffff1660405190610c388083019183831067ffffffffffffffff84111761106d5783926124b7926200edf0853973ffffffffffffffffffffffffffffffffffffffff909116815260200190565b03905ff080156102e1576125069073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006033541617603355565b602b5473ffffffffffffffffffffffffffffffffffffffff1660405190614dd48083019183831067ffffffffffffffff84111761106d5783926125699262013844853973ffffffffffffffffffffffffffffffffffffffff909116815260200190565b03905ff080156102e1576125b89073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006034541617603455565b61260d6125cb6125c6611fe5565b614100565b5073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006035541617603555565b602b5473ffffffffffffffffffffffffffffffffffffffff166040519061284b8083019183831067ffffffffffffffff84111761106d578392612670926200c5a5853973ffffffffffffffffffffffffffffffffffffffff909116815260200190565b03905ff080156102e1576126bf9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006032541617603255565b6126e1610a8c602b5473ffffffffffffffffffffffffffffffffffffffff1690565b60355473ffffffffffffffffffffffffffffffffffffffff1690803b15610188576040517f2d77138900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921660048301525f908290602490829084905af180156102e1576127605750565b8061276e5f6108c79361108e565b8061017e565b73ffffffffffffffffffffffffffffffffffffffff612791613554565b818061279b613554565b92169116808210156128345782905b167fffffffffffffffffffffffff0000000000000000000000000000000000000000602a541617602a55167fffffffffffffffffffffffff0000000000000000000000000000000000000000602954161760295573ffffffffffffffffffffffffffffffffffffffff602954169073ffffffffffffffffffffffffffffffffffffffff602a541690565b9082906127aa565b6040519060a0820182811067ffffffffffffffff82111761106d576040525f6080838281528260208201528260408201528260608201520152565b90816020910312610188575173ffffffffffffffffffffffffffffffffffffffff811681036101885790565b9081602091031261018857516128b881610895565b90565b90929173ffffffffffffffffffffffffffffffffffffffff60a09161292e8460c081019773ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b16910152565b61296961296061295862ffffff61296f949795969761295161283c565b501661398a565b62ffffff1690565b9360020b613a1e565b60020b90565b62ffffff83166101f48103612c7557505061298d600a935b84613c0d565b90612a636020846129ba610a8c601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b6129dc610a8c60295473ffffffffffffffffffffffffffffffffffffffff1690565b5f6129ff610a8c602a5473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fa167129500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201529216602483015262ffffff9093166044820152938492839182906064820190565b03925af180156102e15773ffffffffffffffffffffffffffffffffffffffff915f91612c46575b501693843b15610188576040517ff637731d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152905f82602481838a5af19182156102e157612b9092612c32575b50612b86612b1360295473ffffffffffffffffffffffffffffffffffffffff1690565b95612b7a612b36602a5473ffffffffffffffffffffffffffffffffffffffff1690565b612b5d612b416110cf565b73ffffffffffffffffffffffffffffffffffffffff909a168a52565b73ffffffffffffffffffffffffffffffffffffffff166020890152565b62ffffff166040870152565b60020b6060850152565b5f6080840152612bf660208385612bbf610a8c602b5473ffffffffffffffffffffffffffffffffffffffff1690565b905f6040518096819582947f6276cbbe000000000000000000000000000000000000000000000000000000008452600484016128bb565b03925af180156102e157612c075750565b612c289060203d602011612c2b575b612c20818361108e565b8101906128a3565b50565b503d612c16565b8061276e5f612c409361108e565b5f612af0565b612c68915060203d602011612c6e575b612c60818361108e565b810190612877565b5f612a8a565b503d612c56565b610bb88103612c8b57505061298d603c93612987565b61271003612c9f575061298d60c893612987565b92612cc6610a8c601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b90813b15610188576040517f8a7c195f00000000000000000000000000000000000000000000000000000000815262ffffff85166004820152600286900b6024820152915f908390604490829084905af19182156102e15761298d92612d2d575b50612987565b8061276e5f612d3b9361108e565b5f612d27565b9190826040910312610188576020825192015190565b9061016092612db28360609373ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b805160020b60a0840152602081015160020b60c0840152604081015160e084015201516101008201526101406101208201525f6101408201520190565b600f0b5f039081600f0b91820361083157565b919273ffffffffffffffffffffffffffffffffffffffff604061018095612e758660209673ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051151560a08701528481015160c087015201511660e084015280511515610100840152015115156101208201526101606101408201525f6101608201520190565b3d15612ee1573d90612ec882611f4a565b91612ed6604051938461108e565b82523d5f602084013e565b606090565b15612eed57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f76342073686f756c64206e6f74206f766572666c6f77000000000000000000006044820152fd5b90602082519201517fffffffff0000000000000000000000000000000000000000000000000000000081169260048110612f83575050565b7fffffffff00000000000000000000000000000000000000000000000000000000929350829060040360031b1b161690565b9190915f838201938412911290801582169115161761083157565b9192909281600f0b15613361575b7fffffffffffffffffffffffffffffffff8000000000000000000000000000000082600f0b14613339575b604082936130196130b494612def565b90831561331e576401000276a4915b5f73ffffffffffffffffffffffffffffffffffffffff85518098819682957f128acb080000000000000000000000000000000000000000000000000000000084528a30600486019273ffffffffffffffffffffffffffffffffffffffff928360c0969316855215156020850152600f0b604084015216606082015260a060808201525f60a08201520190565b0393165af19384156102e1575f925f956132f7575b505f9492936f7fffffffffffffffffffffffffffffff8513848682156132dd575b82156132b3575b508115613289575b50613280575b9160209161314f6131ba94835f14613265576401000276a4905b61312b6131246110ed565b9515158652565b600f0b8486015273ffffffffffffffffffffffffffffffffffffffff166040840152565b6131576110fc565b915f83525f848401525f613183610a8c602f5473ffffffffffffffffffffffffffffffffffffffff1690565b92604051968795869485937f2229d0b400000000000000000000000000000000000000000000000000000000855260048501612e02565b03925af15f9181613244575b50613234575050507fffffffff0000000000000000000000000000000000000000000000000000000061320c61321292613207613201612eb7565b91612ee6565b612f4b565b16613e8b565b5f906128b88261322a815b8560801d600f0b90612fb5565b93600f0b90612fb5565b9392506128b89161322a9061321d565b61325e91925060203d602011610b3257610b23818361108e565b905f6131c6565b73fffd8963efd1fc6a506488495d951d5263988d2590613119565b600195506130ff565b7fffffffffffffffffffffffffffffffff800000000000000000000000000000009150125f6130f9565b7fffffffffffffffffffffffffffffffff800000000000000000000000000000001391505f6130f1565b6f7fffffffffffffffffffffffffffffff821392506130ea565b90945061331491925060403d604011610b6057610b52818361108e565b919091935f6130c9565b73fffd8963efd1fc6a506488495d951d5263988d2591613028565b7fffffffffffffffffffffffffffffffff800000000000000000000000000000019150613009565b60019150612fde565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561018857604051907ffe74f05b00000000000000000000000000000000000000000000000000000000825260048201525f60248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156102e1576133e05750565b5f6108c79161108e565b90919073ffffffffffffffffffffffffffffffffffffffff811661342457505f80808061341894865af11590565b61341f5750565b614001565b919073ffffffffffffffffffffffffffffffffffffffff604051927fa9059cbb00000000000000000000000000000000000000000000000000000000845216600483015260248201525f604060208260448582885af13d15601f3d1160018551141617169282815282602082015201521561349c5750565b73ffffffffffffffffffffffffffffffffffffffff16613f21565b604051615e828082019082821067ffffffffffffffff83111761106d5760209183916200672383393081520301905ff080156102e15773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602b541617602b55565b906009811015611c495760051b0190565b9081602091031261018857516128b8816108b0565b613581613567613562614314565b611c3c565b5173ffffffffffffffffffffffffffffffffffffffff1690565b61358c61012061110b565b906135cc6135b2610a8c602f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168352565b61360e6135f1610a8c602e5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166020840152565b613650613633610a8c602c5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166040840152565b613692613675610a8c602d5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166060840152565b6136d46136b7610a8c60305473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166080840152565b6137166136f9610a8c60315473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1660a0840152565b61375861373b610a8c60335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1660c0840152565b6004602061377e610a8c60345473ffffffffffffffffffffffffffffffffffffffff1690565b604051928380927fc34c08e50000000000000000000000000000000000000000000000000000000082525afa9081156102e1576137f49173ffffffffffffffffffffffffffffffffffffffff915f91613930575b501673ffffffffffffffffffffffffffffffffffffffff1660e0840152909190565b613837613819610a8c60325473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16610100830152565b73ffffffffffffffffffffffffffffffffffffffff5f9216915b6009811061385e57505090565b8060206138716135676138e6948661352e565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602482015292839081906044820190565b03815f885af19182156102e157600192613902575b5001613851565b6139229060203d8111613929575b61391a818361108e565b81019061353f565b505f6138fb565b503d613910565b613949915060203d602011612c6e57612c60818361108e565b5f6137d2565b6040519061395e60408361108e565b600c82527f426f756e6420726573756c7400000000000000000000000000000000000000006020830152565b620f423f5f61399892614600565b906108c76139e7613a196139aa61394f565b6040519283917fb60e72cc0000000000000000000000000000000000000000000000000000000060208401526040602484015260648301906103ed565b866044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261108e565b614df2565b613a6190613a2c600161472d565b5f811215613b2e57613a41613a4691196144c9565b614515565b613a50600161457c565b613a5b613fff61457c565b91614600565b7f8000000000000000000000000000000000000000000000000000000000000000811015613b1f57613a95613a9b916144c9565b196145a9565b905b6040517fa322c40e000000000000000000000000000000000000000000000000000000008152600481018390525f81602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156102e1576108c7915f91613b05575b50613b0061394f565b6147b8565b613b1991503d805f833e6102d3818361108e565b5f613af7565b613b2890614542565b90613a9d565b613b379061457c565b613a46565b90613a6191613b4e826001131561472d565b5f811215613b8e57613a41613b6391196144c9565b905b613b6f600161457c565b905f811215613b8557613a41613a5b91196144c9565b613a5b9061457c565b613b979061457c565b90613b65565b91613a6192613bae8284131561472d565b5f811215613bfe57613a41613bc391196144c9565b915b5f811215613bef57613a41613b6f91196144c9565b5f811215613b8557613a41613a5b91196144c9565b613bf89061457c565b90613bda565b613c079061457c565b91613bc5565b9081613c1881614833565b0260020b91613c2681614861565b0260020b60018301925f600185129112908015821691151617610831577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908113600116610831576128b892613c7d92613b9d565b60020b614872565b604051906080820182811067ffffffffffffffff82111761106d576040525f6060838281528260208201528260408201520152565b90929192613d7e6109ba613d1260606040613d06613cd6613c85565b9960208b613cf08a5160020b838c015160020b908d614bbe565b60029291920b928391015260020b808d52614cc4565b95015195015160020b90565b60019060020b5f817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180712817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618050390620d89e80503016fffffffffffffffffffffffffffffffff0490565b9081811315613e2057505b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610188576040517f4c63e5620000000000000000000000000000000000000000000000000000000081528115156004820152915f83602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9283156102e157613e0593613e0c575b50613b3c565b6040830152565b8061276e5f613e1a9361108e565b5f613dff565b9050613d89565b90929192613d7e6014613e866109ba613d1260606040613e7a613e48613c85565b9b8c613e628c8c6020815160020b91015160020b91614bbe565b60029291920b9182602083015260020b809152614cc4565b97015197015160020b90565b614de8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561018857604051907f7c84c69b00000000000000000000000000000000000000000000000000000000825260048201527f93dafdf10000000000000000000000000000000000000000000000000000000060248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156102e1576133e05750565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011673ffffffffffffffffffffffffffffffffffffffff604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301527fa9059cbb000000000000000000000000000000000000000000000000000000006024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011673ffffffffffffffffffffffffffffffffffffffff604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301525f6024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff4b3b1bc0000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b805191908290602001825e015f815290565b60409073ffffffffffffffffffffffffffffffffffffffff6128b8949316815281602082015201906103ed565b9060405160208101906141438161411784876140c1565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261108e565b51902090604051927fffa186490000000000000000000000000000000000000000000000000000000084526020848061418486600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9384156102e1575f94614229575b5083737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561018857614202915f9160405193849283927fc657c718000000000000000000000000000000000000000000000000000000008452600484016140d3565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156102e1576127605750565b61424391945060203d602011612c6e57612c60818361108e565b925f6141ab565b9061425482611119565b614261604051918261108e565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061428f8294611119565b0190602036910137565b60608082526004908201527f54455354000000000000000000000000000000000000000000000000000000006080820152906012604061430f60a085018581036020870152604090600481527f544553540000000000000000000000000000000000000000000000000000000060208201520190565b930152565b61431e600161424a565b6113259190620053fe5f5b60ff811660018110156144375760405186810181811067ffffffffffffffff82111761106d5761435d829189878439614299565b03905ff09081156102e1576135678161439b6143a194614380610a8c958a611c4e565b9073ffffffffffffffffffffffffffffffffffffffff169052565b86611c4e565b90813b15610188576040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201527f80000000000000000000000000000000000000000000000000000000000000006024820152915f908390604490829084905af19081156102e15760ff92600192614423575b500116614329565b8061276e5f6144319361108e565b5f61441b565b5050509150565b1561444557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b7f800000000000000000000000000000000000000000000000000000000000000003907f8000000000000000000000000000000000000000000000000000000000000000821161083157565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161083157565b907f8000000000000000000000000000000000000000000000000000000000000000820191821161083157565b9190820391821161083157565b907f8000000000000000000000000000000000000000000000000000000000000000820180921161083157565b906001820180921161083157565b9190820180921161083157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b81156145fb570690565b6145c4565b5f9061460e8484111561443e565b82811091821580614723575b61471b5761463061462b858761456f565b6145a9565b92600383111580614712575b614703577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc831015806146f9575b6146e857858311156146a6575050906146868461468b9361456f565b6145f1565b9182156146a057506128b891613a41916145b7565b91505090565b9594929190956146b7575b50505050565b83949550614686906146c9939461456f565b9182156146a057506146de9161462b9161456f565b905f8080806146b1565b505090506128b8929150199061456f565b508219841161466a565b50509190506128b892506145b7565b5082841161463c565b509250505090565b508482111561461a565b1561473457565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f5374645574696c7320626f756e6428696e743235362c696e743235362c696e7460448201527f323536293a204d6178206973206c657373207468616e206d696e2e00000000006064820152fd5b613a19614803916141176108c7946040519485937f4b5c42770000000000000000000000000000000000000000000000000000000060208601526040602486015260648501906103ed565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8483030160448501526103ed565b60020b80156145fb577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180590565b60020b80156145fb57620d89e80590565b60020b908160ff1d82810118620d89e88111614bb85763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102700100000000000000000000000000000000189160028116614b9c575b60048116614b80575b60088116614b64575b60108116614b48575b60208116614b2c575b60408116614b10575b60808116614af4575b6101008116614ad8575b6102008116614abc575b6104008116614aa0575b6108008116614a84575b6110008116614a68575b6120008116614a4c575b6140008116614a30575b6180008116614a14575b6201000081166149f8575b6202000081166149dd575b6204000081166149c2575b62080000166149a9575b5f12614982575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0461497b565b6b048a170391f7dc42444e8fa290910260801c90614974565b6d2216e584f5fa1ea926041bedfe9890920260801c9161496a565b916e5d6af8dedb81196699c329225ee6040260801c9161495f565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91614954565b916f31be135f97d08fd981231505542fcfa60260801c91614949565b916f70d869a156d2a1b890bb3df62baf32f70260801c9161493f565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91614935565b916fd097f3bdfd2022b8845ad8f792aa58250260801c9161492b565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91614921565b916ff3392b0822b70005940c7a398e4b70f30260801c91614917565b916ff987a7253ac413176f2b074cf7815e540260801c9161490d565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91614903565b916ffe5dee046a99a2a811c461f1969c30530260801c916148f9565b916fff2ea16466c96a3843ec78b326b528610260801c916148f0565b916fff973b41fa98c081472e6896dfb254c00260801c916148e7565b916fffcb9843d60f6159c9db58835c9266440260801c916148de565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c916148d5565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c916148cc565b916ffff97272373d413259a46990580e213a0260801c916148c3565b82614e0c565b614c1d614c44612969614c4961296995614c4488614c3e6060614c4f999c9b9c015160020b998a9889978896879550614c0461296987614bfd81614833565b0260020b90565b614c1461296988614bfd81614861565b9160020b613b9d565b9c614c2e61296985614bfd81614833565b614c1461296986614bfd81614861565b9a614e3a565b614e97565b96614e3a565b928360020b8160020b125f14614cbe5792905b819380928160020b8160020b8114614c7d575b505050509190565b614c9061296