@uniswap/v4-core
Version:
🦄 Core smart contracts of Uniswap v4
1 lines • 631 kB
JSON
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"LIQ_PARAM_NO_SALT","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":"LIQ_PARAM_SALT","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":"_checkError","inputs":[{"name":"solc","type":"int128","internalType":"int128"},{"name":"js","type":"int128","internalType":"int128"},{"name":"errMsg","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"_modifyLiquidityJS","inputs":[{"name":"poolId","type":"bytes32","internalType":"PoolId"},{"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":[{"name":"","type":"int128","internalType":"int128"},{"name":"","type":"int128","internalType":"int128"}],"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":"logParams","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":"pure"},{"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_ffi_addLiqudity_weirdPool_0_returnsCorrectLiquidityDelta","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_ffi_addLiqudity_weirdPool_1_returnsCorrectLiquidityDelta","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_ffi_fuzz_addLiquidity_defaultPool_ReturnsCorrectLiquidityDelta","inputs":[{"name":"paramSeed","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_gas_modifyLiquidity_newPosition","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_gas_modifyLiquidity_updateSamePosition_withSalt","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_modifyLiquidity_samePosition_withSalt_isUpdated","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_modifyLiquidity_samePosition_zeroSalt_isUpdated","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_modifyLiquidity_sameSalt_differentLiquidityRouters_doNotEditSamePosition","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_modifyLiquidity_sameTicks_withDifferentSalt_isNotUpdated","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60806040523461021457600160ff19600c541617600c55600160ff19601f541617601f555f606061002e610218565b607719815260786020820152670de0b6b3a7640000604082015201526378ffff8865ffffffffffff196020541617602055670de0b6b3a76400006021555f6022555f606061007a610218565b607719815260786020820152670de0b6b3a763ffff19604082015201526378ffff8865ffffffffffff196023541617602355670de0b6b3a763ffff196024555f6025556040516060810181811060018060401b038211176102005760409081526001808352606319602084018190526bb504f333f9de6484597d89b3929093018290526026805460ff19169091179055602791909155602880546001600160a01b03199081169092179055604280548216600e17905560438054909116614000600160a01b0317905561caff60f01b6048555f6060610157610218565b607719815260786020820152670de0b6b3a7640000604082015201526378ffff8865ffffffffffff196049541617604955670de0b6b3a7640000604a555f604b556101a0610218565b607719815260786020820152670de0b6b3a76400006040820152606061caff60f01b9101526378ffff8865ffffffffffff19604c541617604c55670de0b6b3a7640000604d5561caff60f01b604e556040516201dac09081620002388239f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b60405190608082016001600160401b038111838210176102005760405256fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c9081630a9254e4146137ab575080631ed7831c146137025780632499a6ca14613649578063279d6da7146133d35780632877410614612e525780632ade388014612c9557806339cd201314612c345780633e5e3c2314612b8b5780633f7286f414612ae2578063407efc7e1461290d57806352d7341c1461276b578063542524dd1461271c57806360f8aee11461249057806366d9a9a0146123355780637bdfae2d146122845780637ce2d94e14611d725780638041e4df14611d1157806385226c8114611c61578063916a17c614611b8c57806393ad73ed14611b27578063aad5e12514611867578063acf5d6da1461087d578063b0464fdc146107a8578063b1a73b8a14610740578063b31f088a14610456578063b5508aa9146103a6578063ba414fa614610363578063c7b8e15d14610325578063d0df58d8146102c4578063e00c253b14610280578063e20c9f71146101c75763fa7626d40361000f57346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457602060ff601f54166040519015158152f35b80fd5b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106102545761025085610244818703826143b8565b60405191829182614315565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161022d565b50346101c45760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4576102c16102bc366143f9565b615948565b80f35b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457604c54604d54604e5460408051600285810b825260189590951c90940b60208501528301919091526060820152608090f35b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760206040516401000276a48152f35b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457602061039c61586f565b6040519015158152f35b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4576019546103e181614727565b916103ef60405193846143b8565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106104395760405160208082528190610250908201886144a7565b600160208192610448856151b0565b81520192019201919061041c565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4578073ffffffffffffffffffffffffffffffffffffffff602b54166104f16fffffffffffffffffffffffffffffffff6104e960475473ffffffffffffffffffffffffffffffffffffffff602c54169485604954928360181c60020b9360020b92615b1a565b505016615df7565b602082816105686040519461050683876143b8565b8386527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301958636858301376040519485809481937f5a6bcfda000000000000000000000000000000000000000000000000000000008352600483016150dc565b03925af1801561070757610712575b508061064973ffffffffffffffffffffffffffffffffffffffff602b54166105cb60475473ffffffffffffffffffffffffffffffffffffffff602c54169283604954928360181c60020b9360020b92615b1a565b5050946105fe6fffffffffffffffffffffffffffffffff604a54166fffffffffffffffffffffffffffffffff8816615e77565b6040519061060c85836143b8565b87825236858301376040519687809481937f5a6bcfda000000000000000000000000000000000000000000000000000000008352600483016150dc565b03925af18015610707576106d6575b836102c1836fffffffffffffffffffffffffffffffff806106ce6106c073ffffffffffffffffffffffffffffffffffffffff602b54166047549073ffffffffffffffffffffffffffffffffffffffff602c5416604954928360181c60020b9360020b92615b1a565b50509382604a541690615166565b169116615e77565b82813d8311610700575b6106ea81836143b8565b810103126106fc576102c19151610658565b5f80fd5b503d6106e0565b6040513d86823e3d90fd5b92508083813d8311610739575b61072981836143b8565b810103126106fc57839251610577565b503d61071f565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457606060ff6026541660275473ffffffffffffffffffffffffffffffffffffffff6028541690604051921515835260208301526040820152f35b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457601c546107e381614727565b916107f160405193846143b8565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061083357604051806102508782614613565b600260206001926040516108468161439c565b73ffffffffffffffffffffffffffffffffffffffff865416815261086b858701615427565b8382015281520192019201919061081e565b50346101c45760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4576108b6366143f9565b6040516108c281614364565b73ffffffffffffffffffffffffffffffffffffffff6044541681526045549073ffffffffffffffffffffffffffffffffffffffff8216602082015262ffffff8260a01c166040820152606081019160b81c60020b8252608073ffffffffffffffffffffffffffffffffffffffff604654169101526040519061094382614380565b838252602082019284845260408301938585528560608501526109d0825160020b6109db6109c76109d06109ab6109d5602089015160020b958a5160020b97888096819582948361099381616bb4565b0260020b846109a181616be2565b0260020b916167f1565b60020b99826109b981616bb4565b0260020b836109a181616be2565b60020b98616422565b6152b3565b94616422565b908160020b8160020b125f146118615790915b8291809360020b9060020b90808214611780575b50505060020b80925260020b808552610a1a8161647f565b90610a248361647f565b8083908a928b9573ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff821611611775575b505073ffffffffffffffffffffffffffffffffffffffff8216926c01000000000000000000000000841061160f57508091809373ffffffffffffffffffffffffffffffffffffffff8316106115ed575b5050610afc8173ffffffffffffffffffffffffffffffffffffffff80610ad686829661451d565b169116907b7fffffffffffffffffffffffffffffff000000000000000000000000616d33565b91169081156115c057906fffffffffffffffffffffffffffffffff94939291045b6f7fffffffffffffffffffffffffffffff8111156115ba57506f7fffffffffffffffffffffffffffffff915b6f7fffffffffffffffffffffffffffffff8111156115ad5750610b85610b7f6f7fffffffffffffffffffffffffffffff9261647f565b9361647f565b808473ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff8216116115a2575b505073ffffffffffffffffffffffffffffffffffffffff8416918a6c01000000000000000000000000841061147357505092610c4d929184610c529592809273ffffffffffffffffffffffffffffffffffffffff831610611452575b5050610c4673ffffffffffffffffffffffffffffffffffffffff91610c40838516848316616c00565b9361451d565b1691616d33565b616dd2565b169085821261142a57600160406fffffffffffffffffffffffffffffffff920151935160020b87817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180712817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618050390620d89e8050301810416908181135f146114225750905b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561141357846040517f4c63e56200000000000000000000000000000000000000000000000000000000815283151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611417576113fe575b50508160011361137a578481121561134a57197f8000000000000000000000000000000000000000000000000000000000000000037f8000000000000000000000000000000000000000000000000000000000000000811161131d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161131d57905b7f800000000000000000000000000000000000000000000000000000000000000190858112156112e957197f8000000000000000000000000000000000000000000000000000000000000000037f800000000000000000000000000000000000000000000000000000000000000081116112bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116112bc5790610e7a92616e57565b7f8000000000000000000000000000000000000000000000000000000000000000811015611264577f8000000000000000000000000000000000000000000000000000000000000000037f80000000000000000000000000000000000000000000000000000000000000008111611237571960018101809111611237575b604051927fa322c40e0000000000000000000000000000000000000000000000000000000084528160048501528484602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841561122c578594611208575b50611032610fd161102d604096611001885191610f6c8a846143b8565b600c83527f426f756e6420726573756c740000000000000000000000000000000000000000602084015289519485937f4b5c42770000000000000000000000000000000000000000000000000000000060208601528b60248601526064850190614464565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc848303016044850152614464565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826143b8565b617035565b5261103c81615948565b8261117f73ffffffffffffffffffffffffffffffffffffffff602c54166020918291865161106a84826143b8565b8581527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08401368583013787519586809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835261113a6004840173ffffffffffffffffffffffffffffffffffffffff60445416815260455473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60465416910152565b61116b60a484018c60608091805160020b8452602081015160020b6020850152604081015160408501520151910152565b610140610124840152610144830190614464565b03925af19384156111ff575084936111cb575b846102c1856111ba6111a6876047546147fe565b91906111b0615365565b908460801d6156cb565b6111c26153c6565b91600f0b6156cb565b90809350813d83116111f8575b6111e281836143b8565b810103126106fc579051906111ba6111a6611192565b503d6111d8565b513d86823e3d90fd5b6112259194503d8087833e61121d81836143b8565b8101906146ed565b925f610f4f565b6040513d87823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f8000000000000000000000000000000000000000000000000000000000000000810190811115610ef8576024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f800000000000000000000000000000000000000000000000000000000000000081018091116112bc5790610e7a92616e57565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f8000000000000000000000000000000000000000000000000000000000000000810180911161131d5790610dd2565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f5374645574696c7320626f756e6428696e743235362c696e743235362c696e7460448201527f323536293a204d6178206973206c657373207468616e206d696e2e00000000006064820152fd5b81611408916143b8565b61141357845f610d4a565b8480fd5b6040513d84823e3d90fd5b905090610cd9565b6004867f93dafdf1000000000000000000000000000000000000000000000000000000008152fd5b92509050610c4673ffffffffffffffffffffffffffffffffffffffff610c17565b929173ffffffffffffffffffffffffffffffffffffffff8195929516806c01000000000000000000000000105f1461155f579361152295936114fb610c4d73ffffffffffffffffffffffffffffffffffffffff9585610c4d9961151b97916c01000000000000000000000000918211611554575b50610c468991610c40838516848316616c00565b978092506c0100000000000000000000000080921161153c575b5061451d565b1690616c7a565b808316828416101561153557505b610c52565b9050610c52565b9150506c01000000000000000000000000905f611515565b909150610c466114e7565b61151b925092816115309773ffffffffffffffffffffffffffffffffffffffff95610c4d9897949382955011611597575b505061451d565b915091505f80611590565b915093505f80610bbb565b610b7f610b85919261647f565b91610b49565b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526012600452fd5b9092509050610afc73ffffffffffffffffffffffffffffffffffffffff610aaf565b91945073ffffffffffffffffffffffffffffffffffffffff8116918b836c01000000000000000000000000105f14611731575050806c01000000000000000000000000928311611726575b506116808173ffffffffffffffffffffffffffffffffffffffff80610ad686829661451d565b91169081156116f9576116dc8b6fffffffffffffffffffffffffffffffff979695946116f39473ffffffffffffffffffffffffffffffffffffffff9404968092506c0100000000000000000000000080921161153c575061451d565b166f7fffffffffffffffffffffffffffffff616c00565b91610b1d565b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526012600452fd5b91905061168061165a565b6116dc919594836fffffffffffffffffffffffffffffffff99986116f39673ffffffffffffffffffffffffffffffffffffffff96938295501161159757505061451d565b915091505f80610a5f565b8261178e8195969394616bb4565b0260020b831461180057505003627fffff81137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008212176117d357905b5f8080610a02565b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b91509250017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008112627fffff821317156117cb576024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b916109ee565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45773ffffffffffffffffffffffffffffffffffffffff6029541673ffffffffffffffffffffffffffffffffffffffff602a54166118d0615ad7565b50604051916118de83614364565b825260208201526101f46040820152617fff606082015281608082015260a081209082602073ffffffffffffffffffffffffffffffffffffffff602b541660c4604051809481937f6276cbbe00000000000000000000000000000000000000000000000000000000835261199f600484018973ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b6c0100000000000000000000000060a48401525af1801561070757611af8575b506040516201fffc7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb80096119f183614380565b8252602082015267e8fa9963bb5927c26040820152836060820152611a9e73ffffffffffffffffffffffffffffffffffffffff602c54166020938491848860405193611a3d86866143b8565b8185527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086013687870137604051968795869485937f5a6bcfda000000000000000000000000000000000000000000000000000000008552600485016152ca565b03925af192831561122c578593611ac2575b50506111a66111ba916102c1946147fe565b9080949350813d8311611af1575b611ada81836143b8565b810103126106fc57915190916111a66111ba611ab0565b503d611ad0565b611b199060203d602011611b20575b611b1181836143b8565b810190615b01565b505f6119bf565b503d611b07565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4576020805460215460225460408051600285810b825260189590951c90940b94840194909452928201526060810191909152608090f35b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457601d54611bc781614727565b91611bd560405193846143b8565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310611c1757604051806102508782614613565b60026020600192604051611c2a8161439c565b73ffffffffffffffffffffffffffffffffffffffff8654168152611c4f858701615427565b83820152815201920192019190611c02565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457601a54611c9c81614727565b91611caa60405193846143b8565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310611cf45760405160208082528190610250908201886144a7565b600160208192611d03856151b0565b815201920192019190611cd7565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457604954604a54604b5460408051600285810b825260189590951c90940b60208501528301919091526060820152608090f35b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45773ffffffffffffffffffffffffffffffffffffffff602b5416611e386fffffffffffffffffffffffffffffffff60475492611e3282611e2973ffffffffffffffffffffffffffffffffffffffff602c541696611e0c6049548060181c60020b9060020b8a8489615b1a565b505094604c549089604854938360181c60020b9360020b92615c88565b50509216615df7565b16615df7565b60208281611eaf60405194611e4d83876143b8565b8386527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301958636858301376040519485809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835260048301615052565b03925af180156107075761225a575b508281611fb373ffffffffffffffffffffffffffffffffffffffff602b5416611f6860475491611f4b6fffffffffffffffffffffffffffffffff611e2973ffffffffffffffffffffffffffffffffffffffff602c541695611f2e6049548060181c60020b9060020b898489615b1a565b505094604c549088604854938360181c60020b9360020b92615c88565b6fffffffffffffffffffffffffffffffff80604d54169116615e77565b604051611f7584826143b8565b8481528636858301376040519485809481937f5a6bcfda000000000000000000000000000000000000000000000000000000008352600483016150dc565b03925af1801561070757612230575b508273ffffffffffffffffffffffffffffffffffffffff602b541691806120b560475461203873ffffffffffffffffffffffffffffffffffffffff602c54169161201b6049548060181c60020b9060020b85848c615b1a565b505097604c549084604854938360181c60020b9360020b92615c88565b50509661206a6fffffffffffffffffffffffffffffffff80604d541698612062828c169a8b615e77565b169788615e77565b6040519061207885836143b8565b86825236858301376040519586809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835260048301615052565b03925af1801561122c57612206575b5050826fffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff602b541693612168828061215e61215060475473ffffffffffffffffffffffffffffffffffffffff602c54169a6121388c604c54604854918160181c60020b9160020b908686615c88565b50509b604954928360181c60020b9360020b92615b1a565b50509482604d541690615166565b9716961686615e77565b1692737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561220257604051907fdb07fcd200000000000000000000000000000000000000000000000000000000825260048201528360248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611417576121e9575b50506102c191615e77565b816121f3916143b8565b6121fe57825f6121de565b8280fd5b5080fd5b81813d8311612229575b61221a81836143b8565b810103126106fc57515f6120c4565b503d612210565b8181813d8311612253575b61224581836143b8565b810103126106fc5751611fc2565b503d61223b565b8181813d831161227d575b61226f81836143b8565b810103126106fc5751611ebe565b503d612265565b50346101c45760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760043580600f0b81036122025760243580600f0b81036121fe576044359067ffffffffffffffff8211612331573660238301121561233157816004013592846122fc856145d9565b9361230a60405195866143b8565b858552366024878301011161220257856102c19660246020930183880137850101526156cb565b8380fd5b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457601b5461237081614727565b61237d60405191826143b8565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b83831061245557868587604051928392602084019060208552518091526040840160408260051b8601019392905b8282106123ea57505050500390f35b91936020612445827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836124358351604084526040840190614464565b9201519084818403910152614584565b96019201920185949391926123db565b600260206001926040516124688161439c565b612471866151b0565b815261247e858701615427565b838201528152019201920191906123ad565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45773ffffffffffffffffffffffffffffffffffffffff602c5416818060209283612551604051926124ef83856143b8565b8484527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301938436858301376040519586809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835260048301615052565b03925af19182156126b45784926126e9575b506125cd9073ffffffffffffffffffffffffffffffffffffffff602c5416906040519061259085836143b8565b85825236858301376040519485809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835260048301615052565b03925af180156126b4576126bf575b506040517fdd9fca12000000000000000000000000000000000000000000000000000000008152816004820152603460248201527f616464206c697175696469747920746f20616c7265616479206578697374696e60448201527f6720706f736974696f6e20776974682073616c740000000000000000000000006064820152818160848186737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156126b457612687578280f35b816126a692903d106126ad575b61269e81836143b8565b810190615043565b505f808280f35b503d612694565b6040513d85823e3d90fd5b8181813d83116126e2575b6126d481836143b8565b810103126106fc57516125dc565b503d6126ca565b92509082813d8111612715575b61270081836143b8565b810103126106fc5783915082906125cd612563565b503d6126f6565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4575060405173fffd8963efd1fc6a506488495d951d5263988d258152602090f35b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4576128298173ffffffffffffffffffffffffffffffffffffffff602c541660209283916040516127c984826143b8565b8481527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840136858301376040519485809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835260048301615052565b03925af180156126b4576128e3575b506040517fdd9fca12000000000000000000000000000000000000000000000000000000008152816004820152602c60248201527f637265617465206e6577206c697175696469747920746f206120706f7369746960448201527f6f6e20776974682073616c7400000000000000000000000000000000000000006064820152818160848186737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156126b457612687578280f35b8181813d8311612906575b6128f881836143b8565b810103126106fc5751612838565b503d6128ee565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45773ffffffffffffffffffffffffffffffffffffffff6029541673ffffffffffffffffffffffffffffffffffffffff602a5416612976615ad7565b506040519161298483614364565b8252602082015261022760408201526001606082015281608082015260a081209082602073ffffffffffffffffffffffffffffffffffffffff602b541660c4604051809481937f6276cbbe000000000000000000000000000000000000000000000000000000008352612a44600484018973ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b6c0100000000000000000000000060a48401525af1801561070757612ac3575b50604051612a7181614380565b6011602082015269c36cf8709c566db1db7b6040820152836060820152600a8152611a9e73ffffffffffffffffffffffffffffffffffffffff602c54166020938491848860405193611a3d86866143b8565b612adb9060203d602011611b2057611b1181836143b8565b505f612a64565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110612b5f5761025085610244818703826143b8565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612b48565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110612c085761025085610244818703826143b8565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612bf1565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760235460245460255460408051600285810b825260189590951c90940b60208501528301919091526060820152608090f35b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457601e54612cd081614727565b612cdd60405191826143b8565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310612dbc57868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210612d4a57505050500390f35b91936020612dac827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906144a7565b9601920192018594939192612d3b565b604051612dc88161439c565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054612df181614727565b91612dff60405193846143b8565b8183528a526020808b20908b9084015b838210612e35575050505060019282602092836002950152815201920192019190612d0d565b600160208192612e44866151b0565b815201930191019091612e0f565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45773ffffffffffffffffffffffffffffffffffffffff602b541660405190611835908183019183831067ffffffffffffffff8411176133a6579183916020936201294c8439815203019082f080156133995781602073ffffffffffffffffffffffffffffffffffffffff80602954169316926044604051809481937f095ea7b30000000000000000000000000000000000000000000000000000000083528760048401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248401525af180156126b45761337c575b5081602073ffffffffffffffffffffffffffffffffffffffff602a54166044604051809481937f095ea7b30000000000000000000000000000000000000000000000000000000083528760048401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248401525af180156126b45761334f575b5060485460405191612fea83614380565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88835260208301607881526040840192671bc16d674ec8000084528060608601526130ae6fffffffffffffffffffffffffffffffff86611e3282611e2973ffffffffffffffffffffffffffffffffffffffff602b5416966047549773ffffffffffffffffffffffffffffffffffffffff602c5416988b61309b84604c548d8160181c60020b9160020b908688615c88565b5050975160020b918c5160020b93615c88565b602086816130c360405194611e4d83876143b8565b03925af1801561334457613319575b50806132289261316e6fffffffffffffffffffffffffffffffff89611e3261315e73ffffffffffffffffffffffffffffffffffffffff602b5416604754908b8d73ffffffffffffffffffffffffffffffffffffffff602c54169361314c604c54956048549687918160181c60020b9160020b908589615c88565b5050975160020b925160020b93615c88565b5050918380604d54169116615e77565b6040519061317c83836143b8565b8982523683830137604051809481927f5a6bcfda00000000000000000000000000000000000000000000000000000000835261113a6004840173ffffffffffffffffffffffffffffffffffffffff60445416815260455473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60465416910152565b03818a885af1801561330e576132cd575b5050906fffffffffffffffffffffffffffffffff806132c1611f4b946102c19761329073ffffffffffffffffffffffffffffffffffffffff602b541696604754925160020b935160020b604854948592858b615c88565b50509573ffffffffffffffffffffffffffffffffffffffff602c5416604c54928360181c60020b9360020b92615c88565b50509451169116615e77565b8181949392943d8311613307575b6132e581836143b8565b810103126106fc579091506fffffffffffffffffffffffffffffffff80613239565b503d6132db565b6040513d89823e3d90fd5b8181813d831161333d575b61332e81836143b8565b810103126106fc5750806130d2565b503d613324565b6040513d8a823e3d90fd5b6133709060203d602011613375575b61336881836143b8565b810190615198565b612fd9565b503d61335e565b6133949060203d6020116133755761336881836143b8565b612f57565b50604051903d90823e3d90fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4578073ffffffffffffffffffffffffffffffffffffffff602b541661346a6fffffffffffffffffffffffffffffffff6104e960475473ffffffffffffffffffffffffffffffffffffffff602c541694604c549086604854938360181c60020b9360020b92615c88565b6020828161347f60405194611e4d83876143b8565b03925af180156107075761361b575b508061356473ffffffffffffffffffffffffffffffffffffffff602b54166134e660475473ffffffffffffffffffffffffffffffffffffffff602c541692604c549084604854938360181c60020b9360020b92615c88565b5050946135196fffffffffffffffffffffffffffffffff604d54166fffffffffffffffffffffffffffffffff8816615e77565b6040519061352785836143b8565b87825236858301376040519687809481937f5a6bcfda00000000000000000000000000000000000000000000000000000000835260048301615052565b03925af18015610707576135ee575b836102c1836fffffffffffffffffffffffffffffffff806106ce6135e073ffffffffffffffffffffffffffffffffffffffff602b54166047549073ffffffffffffffffffffffffffffffffffffffff602c541690604c5491604854938360181c60020b9360020b92615c88565b50509382604d541690615166565b82813d8311613614575b61360281836143b8565b810103126106fc576102c19151613573565b503d6135f8565b92508083813d8311613642575b61363281836143b8565b810103126106fc5783925161348e565b503d613628565b50346101c45760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101c457604051906136b082614380565b6024358060020b8103612202578252604435908160020b82036101c45760406136f0848460208201526064358382015260843560608201526004356147fe565b825191600f0b8252600f0b6020820152f35b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b81811061377f5761025085610244818703826143b8565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613768565b9050346106fc575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106fc57615e828082019082821067ffffffffffffffff8311176142e85760209183916200837583393081520301905ff080156142dd5773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff0000000000000000000000000000000000000000602b541617602b5560405190611bb980830183811067ffffffffffffffff8211176142e85760209284926201a26a843981520301905ff080156142dd5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602f541617602f5573ffffffffffffffffffffffffffffffffffffffff602b541660405190610d6f80830183811067ffffffffffffffff8211176142e85760209284926201cd45843981520301905ff080156142dd5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602e541617602e5573ffffffffffffffffffffffffffffffffffffffff602b54166040519061183580830183811067ffffffffffffffff8211176142e85760209284926201294c843981520301905ff080156142dd5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602c541617602c5573ffffffffffffffffffffffffffffffffffffffff602b54166040519061131580830183811067ffffffffffffffff8211176142e857602092849262014181843981520301905ff080156142dd5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602d541617602d5573ffffffffffffffffffffffffffffffffffffffff602b5416604051906112d280830183811067ffffffffffffffff8211176142e85760209284926201167a843981520301905ff080156142dd5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603054161760305573ffffffffffffffffffffffffffffffffffffffff602b541660405190610f2280830183811067ffffffffffffffff8211176142e85760209284926201be23843981520301905ff080156142dd5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603154161760315573ffffffffffffffffffffffffffffffffffffffff602b541660405190610c3880830183811067ffffffffffffffff8211176142e857602092849262010a42843981520301905ff080156142dd5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603354161760335573ffffffffffffffffffffffffffffffffffffffff602b541660405190614dd480830183811067ffffffffffffffff8211176142e857602092849262015496843981520301905ff080156142dd5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603454161760345560408051613cab82826143b8565b600d8152602081017f666565436f6e74726f6c6c65720000000000000000000000000000000000000081528251600d6020820192835e5f602d820152600d8152613cf6602d826143b8565b5190208251907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614284575f9161428e575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106fc575f73ffffffffffffffffffffffffffffffffffffffff613dc792855193849283927fc657c71800000000000000000000000000000000000000000000000000000000845216958660048401528760248401526044830190614464565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156142845761426f575b507fffffffffffffffffffffffff0000000000000000000000000000000000000000603554161760355573ffffffffffffffffffffffffffffffffffffffff602b541681519061284b908183019183831067ffffffffffffffff841117614242579183916020936200e1f78439815203019083f080156142375773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff000000000000000000000000000000000000000060325416176032558173ffffffffffffffffffffffffffffffffffffffff602b541673ffffffffffffffffffffffffffffffffffffffff60355416813b156121fe57829160248392865194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af1801561422a57614215575b5050613f2b615f67565b73ffffffffffffffffffffffffffffffffffffffff80613f49615f67565b92169116808210156141f85773ffffffffffffffffffffffffffffffffffffffff80915b1691827fffffffffffffffffffffffff0000000000000000000000000000000000000000602a541617602a551690817fffffffffffffffffffffffff00000000000000000000000000000000000000006029541617602955613fcd615ad7565b50825191613fda83614364565b825260208201908152828201610bb881526060830191603c8352608084019386855260a0812087602073ffffffffffffffffffffffffffffffffffffffff602b541660c48a51809481937f6276cbbe00000000000000000000000000000000000000000000000000000000835261409e600484018a73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b6c0100000000000000000000000060a48401525af180156141ee5773ffffffffffffffffffffffffffffffffffffffff9850918894939185936141cf575b5060475551167fffffffffffffffffffffffff0000000000000000000000000000000000000000604454161760445551167fffffffffffffffffffffffff0000000000000000000000000000000000000000604554161760455551907fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff76ffffff0000000000000000000000000000000000000000604554925160b81b79ffffff0000000000000000000000000000000000000000000000169360a01b169116171760455551167fffffffffffffffffffffffff0000000000000000000000000000000000000000604654161760465580f35b6141e79060203d602011611b2057611b1181836143b8565b505f6140dc565b88513d8b823e3d90fd5b9073ffffffffffffffffffffffffffffffffffffffff8091613f6d565b8161421f916143b8565b61220257815f613f21565b50505051903d90823e3d90fd5b5051903d90823e3d90fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b61427c9193505f906143b8565b5f915f613dec565b83513d5f823e3d90fd5b90506020813d6020116142d5575b816142a9602093836143b8565b810103126106fc575173ffffffffffffffffffffffffffffffffffffffff811681036106fc575f613d4f565b3d915061429c565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60206040818301928281528451809452019201905f5b8181106143385750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161432b565b60a0810190811067ffffffffffffffff8211176142e857604052565b6080810190811067ffffffffffffffff8211176142e857604052565b6040810190811067ffffffffffffffff8211176142e857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176142e857604052565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60809101126106fc576040519061443082614380565b816004358060020b81036106fc5781526024358060020b81036106fc57602082015260443560408201526060606435910152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9080602083519182815201916020808360051b8301019401925f915b8383106144d257505050505090565b909192939460208061450e837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951614464565b970193019301919392906144c3565b9073ffffffffffffffffffffffffffffffffffffffff8091169116039073ffffffffffffffffffffffffffffffffffffffff821161455757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90602080835192838152019201905f5b8181106145a15750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101614594565b67ffffffffffffffff81116142e857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b602081016020825282518091526040820191602060408360051b8301019401925f915b83831061464557505050505090565b90919293946020806146a8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190614584565b97019301930191939290614636565b9291926146c3826145d9565b916146d160405193846143b8565b8294818452818301116106fc578281602093845f96015e010152565b6020818303126106fc5780519067ffffffffffffffff82116106fc57019080601f830112156106fc578151614724926020016146b7565b90565b67ffffffffffffffff81116142e85760051b60200190565b80511561474c5760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80516001101561474c5760400190565b80516002101561474c5760600190565b80516003101561474c5760800190565b80516004101561474c5760a00190565b80516005101561474c5760c00190565b80516006101561474c5760e00190565b80516007101561474c576101000190565b805182101561474c5760209160051b010190565b919091602061482573ffffffffffffffffffffffffffffffffffffffff602b5416926163ef565b6024604051809481937f1e2eaeaf00000000000000000000000000000000000000000000000000000000835260048301525afa9081156142dd575f91615011575b50825160020b90604051917fa322c40e00000000000000000000000000000000000000000000000000000000835260048301525f82602481737109709ecf