From 4ba806bb1f2aac6f550c69598c8a4209d91bd49d Mon Sep 17 00:00:00 2001 From: 0xDmtri <0xDmtri@protonmail.com> Date: Sat, 1 Jun 2024 00:56:36 +0200 Subject: [PATCH 1/9] fix not enough bits --- contracts/src/GetWethValueInPoolBatchRequest.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/src/GetWethValueInPoolBatchRequest.sol b/contracts/src/GetWethValueInPoolBatchRequest.sol index eb649a47..329ac558 100644 --- a/contracts/src/GetWethValueInPoolBatchRequest.sol +++ b/contracts/src/GetWethValueInPoolBatchRequest.sol @@ -256,7 +256,7 @@ contract GetWethValueInPoolBatchRequest { ///@notice The first value is a Q96 representation of p_token0, the second is 128X fixed point representation of p_token1. uint256 priceSquaredShiftQ96 = token0IsReserve0 ? priceSquaredX96 / Q96 - : (Q96 * 0xffffffffffffffffffffffffffffffff) / (priceSquaredX96 / Q96); + : (Q96 * 0xffffffffffffffffffffffffffffffff) / (priceSquaredX96 << 128 / Q96); ///@notice Convert the first value to 128X fixed point by shifting it left 128 bits and normalizing the value by Q96. priceX128 = token0IsReserve0 From 5e7b78d18ba9e8f2a92dbd52f563c8ac0dac05d9 Mon Sep 17 00:00:00 2001 From: 0xDmtri <0xDmtri@protonmail.com> Date: Sat, 1 Jun 2024 00:56:52 +0200 Subject: [PATCH 2/9] add test --- .../test/GetWethValueInPoolBatchRequest.t.sol | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 contracts/test/GetWethValueInPoolBatchRequest.t.sol diff --git a/contracts/test/GetWethValueInPoolBatchRequest.t.sol b/contracts/test/GetWethValueInPoolBatchRequest.t.sol new file mode 100644 index 00000000..76006053 --- /dev/null +++ b/contracts/test/GetWethValueInPoolBatchRequest.t.sol @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import "forge-std/Test.sol"; +import "../src/GetWethValueInPoolBatchRequest.sol"; + +contract GetWethValueInPoolBatchRequestTest is Test { + address constant weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; + uint256 constant wethInPoolThreshold = 0.01 ether; + + function setUp() public {} + + function testPoolWithLiquidity() public { + address[] memory pools = new address[](1); + pools[0] = address(0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640); + + address[] memory dexes = new address[](1); + dexes[0] = address(0x1F98431c8aD98523631AE4a59f267346ea31F984); + + bool[] memory dexIsUniV3 = new bool[](1); + dexIsUniV3[0] = true; + + GetWethValueInPoolBatchRequest data = + new GetWethValueInPoolBatchRequest(pools, dexes, dexIsUniV3, weth, wethInPoolThreshold); + + uint256[] memory weth_values = abi.decode(address(data).code, (uint256[])); + + // expecting weth value to be non 0 + assert(weth_values[0] != 0); + } + + function testPoolWithoutLiquidity() public { + address[] memory pools = new address[](1); + pools[0] = address(0x697C1CcA83174363e9B6758B8CD616474487C192); + + address[] memory dexes = new address[](1); + dexes[0] = address(0x1F98431c8aD98523631AE4a59f267346ea31F984); + + bool[] memory dexIsUniV3 = new bool[](1); + dexIsUniV3[0] = true; + + GetWethValueInPoolBatchRequest data = + new GetWethValueInPoolBatchRequest(pools, dexes, dexIsUniV3, weth, wethInPoolThreshold); + + uint256[] memory weth_values = abi.decode(address(data).code, (uint256[])); + + // expecting weth value to be 0 + assert(weth_values[0] == 0); + } +} From 99a2fc66c4031e10537aae766f54735f26824fb7 Mon Sep 17 00:00:00 2001 From: 0xDmtri <0xDmtri@protonmail.com> Date: Mon, 3 Jun 2024 02:48:24 +0200 Subject: [PATCH 3/9] fix priceX128 --- contracts/src/GetWethValueInPoolBatchRequest.sol | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/contracts/src/GetWethValueInPoolBatchRequest.sol b/contracts/src/GetWethValueInPoolBatchRequest.sol index 329ac558..a0dbc4c7 100644 --- a/contracts/src/GetWethValueInPoolBatchRequest.sol +++ b/contracts/src/GetWethValueInPoolBatchRequest.sol @@ -254,14 +254,11 @@ contract GetWethValueInPoolBatchRequest { : uint256(sqrtPriceX96) ** 2 * 10 ** uint8(decimalShift); ///@notice The first value is a Q96 representation of p_token0, the second is 128X fixed point representation of p_token1. - uint256 priceSquaredShiftQ96 = token0IsReserve0 - ? priceSquaredX96 / Q96 - : (Q96 * 0xffffffffffffffffffffffffffffffff) / (priceSquaredX96 << 128 / Q96); + uint256 priceSquaredShiftQ96 = + token0IsReserve0 ? priceSquaredX96 << 128 / Q96 : type(uint256).max / (priceSquaredX96 << 128 / Q96); ///@notice Convert the first value to 128X fixed point by shifting it left 128 bits and normalizing the value by Q96. - priceX128 = token0IsReserve0 - ? (uint256(priceSquaredShiftQ96) * 0xffffffffffffffffffffffffffffffff) / Q96 - : priceSquaredShiftQ96; + priceX128 = token0IsReserve0 ? priceSquaredShiftQ96 / Q96 : priceSquaredShiftQ96; require(priceX128 <= type(uint256).max, "Overflow"); } } From b916f3bd71d27e4ee9392f11ca2f44d8ea9c3fca Mon Sep 17 00:00:00 2001 From: 0xDmtri <0xDmtri@protonmail.com> Date: Tue, 4 Jun 2024 22:38:24 +0200 Subject: [PATCH 4/9] ignore temp checkpoint --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index ac3eeb97..774dd897 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,6 @@ docs/ # Dotenv file .env + +# Temp checkpoint +*.temp-checkpoint.json From 1ae55a10dc2392f5c856a7ecdd8df60fbf8c9d7b Mon Sep 17 00:00:00 2001 From: 0xDmtri <0xDmtri@protonmail.com> Date: Tue, 4 Jun 2024 22:38:44 +0200 Subject: [PATCH 5/9] specify evm version --- contracts/foundry.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/contracts/foundry.toml b/contracts/foundry.toml index 081872ca..a036449d 100644 --- a/contracts/foundry.toml +++ b/contracts/foundry.toml @@ -1,5 +1,6 @@ [profile.default] optimizer = false +evm_version = "cancun" remappings = [ "forge-std=lib/forge-std/src/", From 0800fe7354118d1be578fbf1469dc0a4a94a31dd Mon Sep 17 00:00:00 2001 From: 0xDmtri <0xDmtri@protonmail.com> Date: Tue, 4 Jun 2024 22:39:09 +0200 Subject: [PATCH 6/9] fix bugs --- contracts/src/GetWethValueInPoolBatchRequest.sol | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/contracts/src/GetWethValueInPoolBatchRequest.sol b/contracts/src/GetWethValueInPoolBatchRequest.sol index a0dbc4c7..d7b239a6 100644 --- a/contracts/src/GetWethValueInPoolBatchRequest.sol +++ b/contracts/src/GetWethValueInPoolBatchRequest.sol @@ -242,12 +242,24 @@ contract GetWethValueInPoolBatchRequest { function fromSqrtX96(uint160 sqrtPriceX96, bool token0IsReserve0, address token0, address token1) internal - view returns (uint256 priceX128) { unchecked { + ///@notice very weird edge case + if (sqrtPriceX96 == 0) { + return 0; + } + + (uint8 token0Decimals, bool t0s) = getTokenDecimalsUnsafe(token0); + (uint8 token1Decimals, bool t1s) = getTokenDecimalsUnsafe(token1); + + ///@notice if either of tokens does not implement `decimals()` return price as 0 + if (!(t0s && t1s)) { + return 0; + } + ///@notice Cache the difference between the input and output token decimals. p=y/x ==> p*10**(x_decimals-y_decimals)>>Q192 will be the proper price in base 10. - int8 decimalShift = int8(IERC20(token0).decimals()) - int8(IERC20(token1).decimals()); + int8 decimalShift = int8(token0Decimals) - int8(token1Decimals); ///@notice Square the sqrtPrice ratio and normalize the value based on decimalShift. uint256 priceSquaredX96 = decimalShift < 0 ? uint256(sqrtPriceX96) ** 2 / uint256(10) ** (uint8(-decimalShift)) From 997aecd09ca4b0c128b3f9aedfe4970810034248 Mon Sep 17 00:00:00 2001 From: 0xDmtri <0xDmtri@protonmail.com> Date: Tue, 4 Jun 2024 22:39:21 +0200 Subject: [PATCH 7/9] add another test --- .../test/GetWethValueInPoolBatchRequest.t.sol | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/contracts/test/GetWethValueInPoolBatchRequest.t.sol b/contracts/test/GetWethValueInPoolBatchRequest.t.sol index 76006053..22388c5a 100644 --- a/contracts/test/GetWethValueInPoolBatchRequest.t.sol +++ b/contracts/test/GetWethValueInPoolBatchRequest.t.sol @@ -10,7 +10,7 @@ contract GetWethValueInPoolBatchRequestTest is Test { function setUp() public {} - function testPoolWithLiquidity() public { + function testUniV3GoodLiquidity() public { address[] memory pools = new address[](1); pools[0] = address(0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640); @@ -29,7 +29,7 @@ contract GetWethValueInPoolBatchRequestTest is Test { assert(weth_values[0] != 0); } - function testPoolWithoutLiquidity() public { + function testUniV3VerySmallLiquidity() public { address[] memory pools = new address[](1); pools[0] = address(0x697C1CcA83174363e9B6758B8CD616474487C192); @@ -47,4 +47,23 @@ contract GetWethValueInPoolBatchRequestTest is Test { // expecting weth value to be 0 assert(weth_values[0] == 0); } + + function testUniV3ZeroLiquidity() public { + address[] memory pools = new address[](1); + pools[0] = address(0xc53489F27F4d8A1cdceD3BFe397CAF628e8aBC13); + + address[] memory dexes = new address[](1); + dexes[0] = address(0x1F98431c8aD98523631AE4a59f267346ea31F984); + + bool[] memory dexIsUniV3 = new bool[](1); + dexIsUniV3[0] = true; + + GetWethValueInPoolBatchRequest data = + new GetWethValueInPoolBatchRequest(pools, dexes, dexIsUniV3, weth, wethInPoolThreshold); + + uint256[] memory weth_values = abi.decode(address(data).code, (uint256[])); + + // expecting weth value to be non 0 + assert(weth_values[0] == 0); + } } From 6be2b7df04304e3c347cb86a6e82546147c73369 Mon Sep 17 00:00:00 2001 From: 0xDmtri <0xDmtri@protonmail.com> Date: Tue, 4 Jun 2024 22:39:35 +0200 Subject: [PATCH 8/9] generate new abi --- src/filters/batch_requests/GetWethValueInAMMBatchRequest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/filters/batch_requests/GetWethValueInAMMBatchRequest.json b/src/filters/batch_requests/GetWethValueInAMMBatchRequest.json index 956cf9df..5aab2f4d 100644 --- a/src/filters/batch_requests/GetWethValueInAMMBatchRequest.json +++ b/src/filters/batch_requests/GetWethValueInAMMBatchRequest.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"pools","type":"address[]","internalType":"address[]"},{"name":"dexes","type":"address[]","internalType":"address[]"},{"name":"dexIsUniV3","type":"bool[]","internalType":"bool[]"},{"name":"weth","type":"address","internalType":"address"},{"name":"wethInPoolThreshold","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"tokenToWethPrices","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"}],"bytecode":{"object":"0x608060405234801561001057600080fd5b5060405161255138038061255183398181016040528101906100329190611a8f565b6000855167ffffffffffffffff81111561004f5761004e6117bd565b5b60405190808252806020026020018201604052801561007d5781602001602082028036833780820191505090505b50905060005b865181101561037f576100b58782815181106100a2576100a1611b5e565b5b60200260200101516103ae60201b60201c565b156100e05760008282815181106100cf576100ce611b5e565b5b602002602001018181525050610374565b6101098782815181106100f6576100f5611b5e565b5b602002602001015161045f60201b60201c565b61035157600087828151811061012257610121611b5e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610174573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101989190611b8d565b905060008883815181106101af576101ae611b5e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102259190611b8d565b90506102368261045f60201b60201c565b15801561024f575061024d8161045f60201b60201c565b155b15610328576000806102828b868151811061026d5761026c611b5e565b5b6020026020010151858561049260201b60201c565b91509150600061029c858a858e8e8d61054160201b60201c565b905060006102b4858b858f8f8e61054160201b60201c565b9050600082141580156102c8575060008114155b156102fd5780826102d99190611be9565b8888815181106102ec576102eb611b5e565b5b60200260200101818152505061031f565b600088888151811061031257610311611b5e565b5b6020026020010181815250505b5050505061034a565b600084848151811061033d5761033c611b5e565b5b6020026020010181815250505b5050610373565b600082828151811061036657610365611b5e565b5b6020026020010181815250505b5b806001019050610083565b506000816040516020016103939190611cdb565b60405160208183030381529060405290506020810180590381f35b60006103bf826106db60201b60201c565b6104555760008273ffffffffffffffffffffffffffffffffffffffff16631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104349190611d45565b6fffffffffffffffffffffffffffffffff1603610454576001905061045a565b5b600090505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b03610488576001905061048d565b600090505b919050565b6000806000806104a987878761071960201b60201c565b9150915061053382828773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16106104eb57876104ed565b885b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16106105265789610528565b885b6108b560201b60201c565b935093505050935093915050565b60008573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361057e578490506106d1565b60008060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046fffffffffffffffffffffffffffffffff1690506001816fffffffffffffffffffffffffffffffff16036106015760009150506106d1565b6000816fffffffffffffffffffffffffffffffff16146106335761062b81876109b960201b60201c565b9150506106d1565b60005b85518110156106ca5760006106888a8a89858151811061065957610658611b5e565b5b602002602001015189868151811061067457610673611b5e565b5b602002602001015189610b0a60201b60201c565b90506000816fffffffffffffffffffffffffffffffff16146106be576106b481896109b960201b60201c565b93505050506106d1565b50806001019050610636565b5060009150505b9695505050505050565b6000807fddca3f43000000000000000000000000000000000000000000000000000000006000526000806004600080875af190508015915050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610756578284610759565b83835b8094508195505050600080610773876106db60201b60201c565b1561081c576000808873ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea9190611df4565b5091509150816dffffffffffffffffffffffffffff169350806dffffffffffffffffffffffffffff16925050506108a5565b60008061082f888a610ea660201b60201c565b91509150600080610846898c610ea660201b60201c565b915091508280156108545750805b156108a0578873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1610156108985783955081945061089f565b8394508195505b5b505050505b8181935093505050935093915050565b6000806000806108ca86610ffb60201b60201c565b915091506000806108e087610ffb60201b60201c565b915091508280156108ee5750805b156109ac5760128460ff1611156109285760128461090c9190611e54565b600a6109189190611fbc565b8a6109239190612036565b61094d565b8360126109359190611e54565b600a6109419190611fbc565b8a61094c9190612067565b5b955060128260ff161115610984576012826109689190611e54565b600a6109749190611fbc565b8961097f9190612036565b6109a9565b8160126109919190611e54565b600a61099d9190611fbc565b896109a89190612067565b5b94505b5050505094509492505050565b6000808214806109db57506000836fffffffffffffffffffffffffffffffff16145b156109e95760009050610b04565b600060406fffffffffffffffffffffffffffffffff8416856fffffffffffffffffffffffffffffffff1602901c90506000608084901c856fffffffffffffffffffffffffffffffff1602905077ffffffffffffffffffffffffffffffffffffffffffffffff811115610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8790612106565b60405180910390fd5b604081901b9050817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03811115610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af390612172565b60405180910390fd5b818101925050505b92915050565b60008215610ce257600060405180606001604052806101f461ffff168152602001610bb861ffff16815260200161271061ffff16815250905060005b6003811015610cdb5760008673ffffffffffffffffffffffffffffffffffffffff16631698ee828973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1610610ba65789610ba8565b8a5b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1610610be1578b610be3565b8a5b868660038110610bf657610bf5611b5e565b5b60200201516040518463ffffffff1660e01b8152600401610c19939291906121f9565b602060405180830381865afa158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5a9190611b8d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ccf576000610ca5878b8b858a61116a60201b60201c565b90506000816fffffffffffffffffffffffffffffffff1614610ccd5780945050505050610e9d565b505b50806001019050610b46565b5050610e22565b60008573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1610905060008573ffffffffffffffffffffffffffffffffffffffff1663e6a4390583610d3e5788610d40565b895b84610d4b578a610d4d565b895b6040518363ffffffff1660e01b8152600401610d6a929190612230565b602060405180830381865afa158015610d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dab9190611b8d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e1f576000610df6868a8a858961116a60201b60201c565b90506000816fffffffffffffffffffffffffffffffff1614610e1d57809350505050610e9d565b505b50505b60016000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550600090505b95945050505050565b6000806000808573ffffffffffffffffffffffffffffffffffffffff1685604051602401610ed49190612259565b6040516020818303038152906040527f70a08231000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610f5e91906122e5565b6000604051808303816000865af19150503d8060008114610f9b576040519150601f19603f3d011682016040523d82523d6000602084013e610fa0565b606091505b50915091508115610fea5760006020825103610fdb5781806020019051810190610fca91906122fc565b905080600194509450505050610ff4565b60008094509450505050610ff4565b6000809350935050505b9250929050565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16614e206040516024016040516020818303038152906040527f313ce567000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516110ab91906122e5565b60006040518083038160008787f1925050503d80600081146110e9576040519150601f19603f3d011682016040523d82523d6000602084013e6110ee565b606091505b5091509150811561115b576000602082510361114c578180602001905181019061111891906122fc565b90506000811480611129575060ff81115b1561113d5760008094509450505050611165565b80600194509450505050611165565b60008094509450505050611165565b6000809350935050505b915091565b6000808473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1610905086611220576000806111b786898961049260201b60201c565b9150915082156111da57848110156111d5576000935050505061132a565b6111ef565b848210156111ee576000935050505061132a565b5b611217836111fd57826111ff565b815b8461120a578261120c565b835b61133360201b60201c565b935050506112b3565b60008473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa15801561126d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129191906123e6565b505050505050905060406112ad82848a8a61152060201b60201c565b901c9250505b816000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505b95945050505050565b6000808203611345576000905061151a565b600077ffffffffffffffffffffffffffffffffffffffffffffffff84116113825782604085901b8161137a57611379612007565b5b0490506114f3565b600060c09050600060c086901c905064010000000081106113ab57602081901c90506020820191505b6201000081106113c357601081901c90506010820191505b61010081106113da57600881901c90506008820191505b601081106113f057600481901c90506004820191505b6004811061140657600281901c90506002820191505b60028110611415576001820191505b600160bf830360018703901c018260ff0387901b8161143757611436612007565b5b0492506fffffffffffffffffffffffffffffffff83111561145e576000935050505061151a565b6000608086901c8402905060006fffffffffffffffffffffffffffffffff871685029050600060c089901c9050600060408a901b9050828110156114a3576001820391505b8281039050608084901b9250828110156114be576001820391505b8281039050608084901c82146114d7576114d6612488565b5b8881816114e7576114e6612007565b5b04870196505050505050505b6fffffffffffffffffffffffffffffffff81111561151557600091505061151a565b809150505b92915050565b6000808273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159291906124b7565b8473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160191906124b7565b0390506000808260000b12611637578160ff16600a0a60028873ffffffffffffffffffffffffffffffffffffffff160a0261166b565b8160000360ff16600a0a60028873ffffffffffffffffffffffffffffffffffffffff160a8161166957611668612007565b5b045b90506000866116c6576c01000000000000000000000000828161169157611690612007565b5b046fffffffffffffffffffffffffffffffff6c0100000000000000000000000002816116c0576116bf612007565b5b046116e5565b6c0100000000000000000000000082816116e3576116e2612007565b5b045b9050866116f25780611723565b6c010000000000000000000000006fffffffffffffffffffffffffffffffff82028161172157611720612007565b5b045b93507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90612530565b60405180910390fd5b505050949350505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6117f5826117ac565b810181811067ffffffffffffffff82111715611814576118136117bd565b5b80604052505050565b6000611827611793565b905061183382826117ec565b919050565b600067ffffffffffffffff821115611853576118526117bd565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061189482611869565b9050919050565b6118a481611889565b81146118af57600080fd5b50565b6000815190506118c18161189b565b92915050565b60006118da6118d584611838565b61181d565b905080838252602082019050602084028301858111156118fd576118fc611864565b5b835b81811015611926578061191288826118b2565b8452602084019350506020810190506118ff565b5050509392505050565b600082601f830112611945576119446117a7565b5b81516119558482602086016118c7565b91505092915050565b600067ffffffffffffffff821115611979576119786117bd565b5b602082029050602081019050919050565b60008115159050919050565b61199f8161198a565b81146119aa57600080fd5b50565b6000815190506119bc81611996565b92915050565b60006119d56119d08461195e565b61181d565b905080838252602082019050602084028301858111156119f8576119f7611864565b5b835b81811015611a215780611a0d88826119ad565b8452602084019350506020810190506119fa565b5050509392505050565b600082601f830112611a4057611a3f6117a7565b5b8151611a508482602086016119c2565b91505092915050565b6000819050919050565b611a6c81611a59565b8114611a7757600080fd5b50565b600081519050611a8981611a63565b92915050565b600080600080600060a08688031215611aab57611aaa61179d565b5b600086015167ffffffffffffffff811115611ac957611ac86117a2565b5b611ad588828901611930565b955050602086015167ffffffffffffffff811115611af657611af56117a2565b5b611b0288828901611930565b945050604086015167ffffffffffffffff811115611b2357611b226117a2565b5b611b2f88828901611a2b565b9350506060611b40888289016118b2565b9250506080611b5188828901611a7a565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611ba357611ba261179d565b5b6000611bb1848285016118b2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bf482611a59565b9150611bff83611a59565b9250828201905080821115611c1757611c16611bba565b5b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611c5281611a59565b82525050565b6000611c648383611c49565b60208301905092915050565b6000602082019050919050565b6000611c8882611c1d565b611c928185611c28565b9350611c9d83611c39565b8060005b83811015611cce578151611cb58882611c58565b9750611cc083611c70565b925050600181019050611ca1565b5085935050505092915050565b60006020820190508181036000830152611cf58184611c7d565b905092915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b611d2281611cfd565b8114611d2d57600080fd5b50565b600081519050611d3f81611d19565b92915050565b600060208284031215611d5b57611d5a61179d565b5b6000611d6984828501611d30565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b611d9581611d72565b8114611da057600080fd5b50565b600081519050611db281611d8c565b92915050565b600063ffffffff82169050919050565b611dd181611db8565b8114611ddc57600080fd5b50565b600081519050611dee81611dc8565b92915050565b600080600060608486031215611e0d57611e0c61179d565b5b6000611e1b86828701611da3565b9350506020611e2c86828701611da3565b9250506040611e3d86828701611ddf565b9150509250925092565b600060ff82169050919050565b6000611e5f82611e47565b9150611e6a83611e47565b9250828203905060ff811115611e8357611e82611bba565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115611ee057808604811115611ebc57611ebb611bba565b5b6001851615611ecb5780820291505b8081029050611ed985611e89565b9450611ea0565b94509492505050565b600082611ef95760019050611fb5565b81611f075760009050611fb5565b8160018114611f1d5760028114611f2757611f56565b6001915050611fb5565b60ff841115611f3957611f38611bba565b5b8360020a915084821115611f5057611f4f611bba565b5b50611fb5565b5060208310610133831016604e8410600b8410161715611f8b5782820a905083811115611f8657611f85611bba565b5b611fb5565b611f988484846001611e96565b92509050818404811115611faf57611fae611bba565b5b81810290505b9392505050565b6000611fc782611a59565b9150611fd283611e47565b9250611fff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611ee9565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061204182611a59565b915061204c83611a59565b92508261205c5761205b612007565b5b828204905092915050565b600061207282611a59565b915061207d83611a59565b925082820261208b81611a59565b915082820484148315176120a2576120a1611bba565b5b5092915050565b600082825260208201905092915050565b7f6f766572666c6f772d3020696e206d756c363475000000000000000000000000600082015250565b60006120f06014836120a9565b91506120fb826120ba565b602082019050919050565b6000602082019050818103600083015261211f816120e3565b9050919050565b7f6f766572666c6f772d3120696e206d756c363475000000000000000000000000600082015250565b600061215c6014836120a9565b915061216782612126565b602082019050919050565b6000602082019050818103600083015261218b8161214f565b9050919050565b61219b81611889565b82525050565b600061ffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b60006121e36121de6121d9846121a1565b6121be565b6121af565b9050919050565b6121f3816121c8565b82525050565b600060608201905061220e6000830186612192565b61221b6020830185612192565b61222860408301846121ea565b949350505050565b60006040820190506122456000830185612192565b6122526020830184612192565b9392505050565b600060208201905061226e6000830184612192565b92915050565b600081519050919050565b600081905092915050565b60005b838110156122a857808201518184015260208101905061228d565b60008484015250505050565b60006122bf82612274565b6122c9818561227f565b93506122d981856020860161228a565b80840191505092915050565b60006122f182846122b4565b915081905092915050565b6000602082840312156123125761231161179d565b5b600061232084828501611a7a565b91505092915050565b61233281611869565b811461233d57600080fd5b50565b60008151905061234f81612329565b92915050565b60008160020b9050919050565b61236b81612355565b811461237657600080fd5b50565b60008151905061238881612362565b92915050565b612397816121a1565b81146123a257600080fd5b50565b6000815190506123b48161238e565b92915050565b6123c381611e47565b81146123ce57600080fd5b50565b6000815190506123e0816123ba565b92915050565b600080600080600080600060e0888a0312156124055761240461179d565b5b60006124138a828b01612340565b97505060206124248a828b01612379565b96505060406124358a828b016123a5565b95505060606124468a828b016123a5565b94505060806124578a828b016123a5565b93505060a06124688a828b016123d1565b92505060c06124798a828b016119ad565b91505092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000602082840312156124cd576124cc61179d565b5b60006124db848285016123d1565b91505092915050565b7f4f766572666c6f77000000000000000000000000000000000000000000000000600082015250565b600061251a6008836120a9565b9150612525826124e4565b602082019050919050565b600060208201905081810360008301526125498161250d565b905091905056fe","sourceMap":"64:17178:26:-:0;;;292:2380;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;477:33;527:5;:12;513:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;477:63;;556:9;551:1578;575:5;:12;571:1;:16;551:1578;;;612:17;620:5;626:1;620:8;;;;;;;;:::i;:::-;;;;;;;;612:7;;;:17;;:::i;:::-;608:105;;;671:1;649:16;666:1;649:19;;;;;;;;:::i;:::-;;;;;;;:23;;;;;690:8;;608:105;787:24;802:5;808:1;802:8;;;;;;;;:::i;:::-;;;;;;;;787:14;;;:24;;:::i;:::-;782:1337;;831:14;863:5;869:1;863:8;;;;;;;;:::i;:::-;;;;;;;;848:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;831:50;;899:14;931:5;937:1;931:8;;;;;;;;:::i;:::-;;;;;;;;916:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;899:50;;973:22;988:6;973:14;;;:22;;:::i;:::-;972:23;:50;;;;;1000:22;1015:6;1000:14;;;:22;;:::i;:::-;999:23;972:50;968:1075;;;1101:10;1113;1127:47;1149:5;1155:1;1149:8;;;;;;;;:::i;:::-;;;;;;;;1159:6;1167;1127:21;;;:47;;:::i;:::-;1100:74;;;;1267:29;1323:77;1343:6;1351:4;1357:2;1361:5;1368:10;1380:19;1323;;;:77;;:::i;:::-;1267:133;;1423:29;1479:77;1499:6;1507:4;1513:2;1517:5;1524:10;1536:19;1479;;;:77;;:::i;:::-;1423:133;;1608:1;1583:21;:26;;:56;;;;;1638:1;1613:21;:26;;1583:56;1579:376;;;1833:21;1809;:45;;;;:::i;:::-;1787:16;1804:1;1787:19;;;;;;;;:::i;:::-;;;;;;;:67;;;;;1579:376;;;1931:1;1909:16;1926:1;1909:19;;;;;;;;:::i;:::-;;;;;;;:23;;;;;1579:376;1024:949;;;;968:1075;;;2023:1;2001:16;2018:1;2001:19;;;;;;;;:::i;:::-;;;;;;;:23;;;;;968:1075;813:1244;;782:1337;;;2103:1;2081:16;2098:1;2081:19;;;;;;;;:::i;:::-;;;;;;;:23;;;;;782:1337;551:1578;589:3;;;;;551:1578;;;;2331:27;2372:16;2361:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;2331:58;;2596:4;2580:14;2576:25;2645:9;2636:7;2632:23;2621:9;2614:42;2678:257;2725:4;2774:16;2787:2;2774:12;;;:16;;:::i;:::-;2769:137;;2849:1;2830:2;2810:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;;2806:90;;2877:4;2870:11;;;;2806:90;2769:137;2923:5;2916:12;;2678:257;;;;:::o;17047:193::-;17110:4;17152:1;17130:6;:18;;;:23;17126:108;;17176:4;17169:11;;;;17126:108;17218:5;17211:12;;17047:193;;;;:::o;8410:303::-;8503:7;8512;8532:11;8545;8560:31;8572:2;8576:6;8584;8560:11;;;:31;;:::i;:::-;8531:60;;;;8609:97;8627:3;8632;8646:6;8637:15;;:6;:15;;;:33;;8664:6;8637:33;;;8655:6;8637:33;8681:6;8672:15;;:6;:15;;;:33;;8699:6;8672:33;;;8690:6;8672:33;8609:17;;;:97;;:::i;:::-;8602:104;;;;;;8410:303;;;;;;:::o;2941:1632::-;3166:7;3492:4;3483:13;;:5;:13;;;3479:57;;3519:6;3512:13;;;;3479:57;3546:24;3573:17;:24;3591:5;3573:24;;;;;;;;;;;;;;;;;;;;;;;;;3546:51;;3741:1;3721:16;:21;;;3717:850;;3765:1;3758:8;;;;;3717:850;3931:1;3911:16;:21;;;3907:558;;3959:32;3966:16;3984:6;3959;;;:32;;:::i;:::-;3952:39;;;;;3907:558;4163:9;4158:293;4182:5;:12;4178:1;:16;4158:293;;;4223:13;4239:78;4259:5;4266:4;4272:5;4278:1;4272:8;;;;;;;;:::i;:::-;;;;;;;;4282:10;4293:1;4282:13;;;;;;;;:::i;:::-;;;;;;;;4297:19;4239;;;:78;;:::i;:::-;4223:94;;4353:1;4344:5;:10;;;4340:93;;4389:21;4396:5;4403:6;4389;;;:21;;:::i;:::-;4382:28;;;;;;;4340:93;4201:250;4196:3;;;;;4158:293;;;;4555:1;4548:8;;;2941:1632;;;;;;;;;:::o;16118:923::-;16170:4;16186:12;16294:66;16288:4;16281:80;16788:4;16745;16650;16554;16519:1;16472:2;16428:5;16402:425;16375:452;;17027:7;17026:8;17019:15;;;16118:923;;;:::o;7448:956::-;7531:7;7540;7588:6;7579:15;;:6;:15;;;7578:55;;7618:6;7626;7578:55;;;7599:6;7607;7578:55;7559:74;;;;;;;;7644:11;7665;7691:16;7704:2;7691:12;;;:16;;:::i;:::-;7687:683;;;7724:15;7741;7776:2;7761:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7723:70;;;;;7813:7;7807:13;;;;7840:7;7834:13;;;;7709:149;;7687:683;;;7879:25;7906:13;7923:30;7942:6;7950:2;7923:18;;;:30;;:::i;:::-;7878:75;;;;7968:25;7995:13;8012:30;8031:6;8039:2;8012:18;;;:30;;:::i;:::-;7967:75;;;;8061:8;:20;;;;;8073:8;8061:20;8057:303;;;8114:6;8105:15;;:6;:15;;;8101:245;;;8150:17;8144:23;;8195:17;8189:23;;8101:245;;;8265:17;8259:23;;8310:17;8304:23;;8101:245;8057:303;7864:506;;;;7687:683;8388:3;8393;8380:17;;;;;;7448:956;;;;;;:::o;8719:563::-;8834:11;8847;8875:20;8897:8;8909:30;8932:6;8909:22;;;:30;;:::i;:::-;8874:65;;;;8950:20;8972:8;8984:30;9007:6;8984:22;;;:30;;:::i;:::-;8949:65;;;;9029:3;:10;;;;;9036:3;9029:10;9025:251;;;9079:2;9061:14;:20;;;;:92;;9149:2;9132:14;:19;;;;:::i;:::-;9125:2;:27;;;;:::i;:::-;9120:1;:33;;;;:::i;:::-;9061:92;;;9101:14;9096:2;:19;;;;:::i;:::-;9089:2;:27;;;;:::i;:::-;9084:1;:33;;;;:::i;:::-;9061:92;9055:98;;9191:2;9173:14;:20;;;;:92;;9261:2;9244:14;:19;;;;:::i;:::-;9237:2;:27;;;;:::i;:::-;9232:1;:33;;;;:::i;:::-;9173:92;;;9213:14;9208:2;:19;;;;:::i;:::-;9201:2;:27;;;;:::i;:::-;9196:1;:33;;;;:::i;:::-;9173:92;9167:98;;9025:251;8864:418;;;;8719:563;;;;;;;:::o;15290:632::-;15351:7;15403:1;15398;:6;:16;;;;15413:1;15408;:6;;;15398:16;15394:63;;;15441:1;15434:8;;;;15394:63;15471:10;15543:2;15503:34;15499:1;:38;15493:1;15485:10;;:53;15484:61;;15471:74;;15559:10;15591:3;15586:1;:8;;15580:1;15572:10;;:23;15559:36;;15624:50;15618:2;:56;;15610:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;15720:2;15713:9;;;;;15837:2;15768:66;:71;15762:2;:77;;15737:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;15903:2;15898;:7;15891:14;;;;15290:632;;;;;:::o;4579:1562::-;4764:7;4787;4783:1185;;;4810:25;:46;;;;;;;;4839:3;4810:46;;;;;;4844:4;4810:46;;;;;;4850:5;4810:46;;;;;;;4875:9;4870:608;4894:15;4890:1;:19;4870:608;;;4934:19;4974:10;4956:37;;;5023:4;5015:12;;:5;:12;;;:27;;5038:4;5015:27;;;5030:5;5015:27;5052:4;5044:12;;:5;:12;;;:27;;5066:5;5044:27;;;5059:4;5044:27;5073:8;5082:1;5073:11;;;;;;;:::i;:::-;;;;;;4956:146;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4934:168;;224:1;5125:27;;:11;:27;;;5121:343;;5247:13;5263:83;5291:7;5300:5;5307:4;5313:11;5326:19;5263:27;;;:83;;:::i;:::-;5247:99;;5382:1;5373:5;:10;;;5369:77;;5418:5;5411:12;;;;;;;;5369:77;5154:310;5121:343;4916:562;4911:3;;;;;4870:608;;;;4796:692;4783:1185;;;5508:18;5537:4;5529:12;;:5;:12;;;5508:33;;5556:19;5612:10;5594:37;;;5632:13;:28;;5656:4;5632:28;;;5648:5;5632:28;5662:13;:28;;5685:5;5662:28;;;5678:4;5662:28;5594:97;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5556:135;;224:1;5710:27;;:11;:27;;;5706:252;;5757:13;5773:83;5801:7;5810:5;5817:4;5823:11;5836:19;5773:27;;;:83;;:::i;:::-;5757:99;;5888:1;5879:5;:10;;;5875:69;;5920:5;5913:12;;;;;;;5875:69;5739:219;5706:252;5494:474;;4783:1185;6115:1;6088:17;:24;6106:5;6088:24;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;6133:1;6126:8;;4579:1562;;;;;;;;:::o;14468:598::-;14552:7;14561:4;14578:21;14601:26;14643:5;:10;;14700:13;14654:60;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14643:72;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14577:138;;;;14730:16;14726:334;;;14762:15;14820:2;14796:13;:20;:26;14792:210;;14865:13;14854:36;;;;;;;;;;;;:::i;:::-;14842:48;;14917:7;14926:4;14909:22;;;;;;;;;14792:210;14978:1;14981:5;14970:17;;;;;;;;;14726:334;15040:1;15043:5;15032:17;;;;;;14468:598;;;;;;:::o;13592:762::-;13657:5;13664:4;13681:25;13708:30;13754:5;:10;;13770:5;13777:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13754:61;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13680:135;;;;13830:20;13826:522;;;13866:21;13934:2;13906:17;:24;:30;13902:388;;13985:17;13974:40;;;;;;;;;;;;:::i;:::-;13956:58;;14054:1;14037:13;:18;:41;;;;14075:3;14059:13;:19;14037:41;14033:187;;;14110:1;14113:5;14102:17;;;;;;;;;14033:187;14180:13;14196:4;14166:35;;;;;;;;;13902:388;14266:1;14269:5;14258:17;;;;;;;;;13826:522;14328:1;14331:5;14320:17;;;;;;13592:762;;;;:::o;6147:1295::-;6337:13;6362:18;6391:4;6383:12;;:5;:12;;;6362:33;;6410:7;6405:931;;6434:11;6447;6462:40;6484:4;6490:5;6497:4;6462:21;;;:40;;:::i;:::-;6433:69;;;;6808:13;6804:255;;;6851:22;6845:3;:28;6841:83;;;6904:1;6897:8;;;;;;;6841:83;6804:255;;;6972:22;6966:3;:28;6962:83;;;7025:1;7018:8;;;;;;;6962:83;6804:255;7081:59;7087:13;:25;;7109:3;7087:25;;;7103:3;7087:25;7114:13;:25;;7136:3;7114:25;;;7130:3;7114:25;7081:5;;;:59;;:::i;:::-;7073:67;;6419:732;;6405:931;;;7172:20;7222:4;7202:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7171:64;;;;;;;;7322:2;7265:53;7277:12;7291:13;7306:5;7313:4;7265:11;;;:53;;:::i;:::-;:59;;7249:76;;7157:179;6405:931;7430:5;7403:17;:24;7421:5;7403:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;6352:1090;6147:1295;;;;;;;;:::o;10964:2514::-;11024:7;11076:1;11071;:6;11067:20;;11086:1;11079:8;;;;11067:20;11102:14;11140:50;11135:1;:55;11131:1967;;11231:1;11225:2;11220:1;:7;;11219:13;;;;;:::i;:::-;;;11210:22;;11131:1967;;;11271:11;11285:3;11271:17;;11306:10;11324:3;11319:1;:8;;11306:21;;11355:11;11349:2;:17;11345:104;;11397:2;11390:9;;;;;11428:2;11421:9;;;;11345:104;11476:7;11470:2;:13;11466:100;;11514:2;11507:9;;;;;11545:2;11538:9;;;;11466:100;11593:5;11587:2;:11;11583:96;;11629:1;11622:8;;;;;11659:1;11652:8;;;;11583:96;11706:4;11700:2;:10;11696:95;;11741:1;11734:8;;;;;11771:1;11764:8;;;;11696:95;11818:3;11812:2;:9;11808:94;;11852:1;11845:8;;;;;11882:1;11875:8;;;;11808:94;11929:3;11923:2;:9;11919:23;;11941:1;11934:8;;;;11919:23;12050:1;12042:3;12036;:9;12029:1;12025;:5;12024:22;;12023:28;12014:3;12008;:9;12002:1;:16;;12001:51;;;;;:::i;:::-;;;11992:60;;12478:34;12469:6;:43;12465:98;;;12543:1;12536:8;;;;;;;12465:98;12581:10;12609:3;12604:1;:8;;12594:6;:19;12581:32;;12631:10;12658:34;12654:1;:38;12644:6;:49;12631:62;;12712:10;12730:3;12725:1;:8;;12712:21;;12751:10;12769:2;12764:1;:7;;12751:20;;12799:2;12794;:7;12790:20;;;12809:1;12803:7;;;;12790:20;12834:2;12828:8;;;;12902:3;12896:2;:9;;12891:14;;12932:2;12927;:7;12923:20;;;12942:1;12936:7;;;;12923:20;12967:2;12961:8;;;;13044:3;13038:2;:9;;13032:2;:15;13025:23;;;;:::i;:::-;;13082:1;13077:2;:6;;;;;:::i;:::-;;;13067:16;;;;11253:1845;;;;;;11131:1967;13348:34;13339:6;:43;13335:90;;;13409:1;13402:8;;;;;13335:90;13454:6;13439:22;;;10964:2514;;;;;:::o;9288:1481::-;9433:17;9662;9728:6;9721:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9694:6;9687:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9682:65;9662:85;;9858:23;9899:1;9884:12;:16;;;:174;;10045:12;10033:25;;:2;:25;10029:1;10012:12;10004:21;;:26;:54;9884:174;;;9971:12;9970:13;;9948:37;;9956:2;9948:37;9944:1;9927:12;9919:21;;:26;:66;;;;;:::i;:::-;;;9884:174;9858:200;;10208:28;10239:16;:143;;142:27;10360:15;:21;;;;;:::i;:::-;;;10321:34;142:27;10315:40;10314:68;;;;;:::i;:::-;;;10239:143;;;142:27;10274:15;:21;;;;;:::i;:::-;;;10239:143;10208:174;;10539:16;:148;;10667:20;10539:148;;;142:27;10607:34;10583:20;10575:66;10574:74;;;;;:::i;:::-;;;10539:148;10527:160;;10722:17;10709:9;:30;;10701:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;9466:1297;;;9288:1481;;;;;;:::o;7:75:28:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:311::-;1250:4;1340:18;1332:6;1329:30;1326:56;;;1362:18;;:::i;:::-;1326:56;1412:4;1404:6;1400:17;1392:25;;1472:4;1466;1462:15;1454:23;;1173:311;;;:::o;1490:117::-;1599:1;1596;1589:12;1613:126;1650:7;1690:42;1683:5;1679:54;1668:65;;1613:126;;;:::o;1745:96::-;1782:7;1811:24;1829:5;1811:24;:::i;:::-;1800:35;;1745:96;;;:::o;1847:122::-;1920:24;1938:5;1920:24;:::i;:::-;1913:5;1910:35;1900:63;;1959:1;1956;1949:12;1900:63;1847:122;:::o;1975:143::-;2032:5;2063:6;2057:13;2048:22;;2079:33;2106:5;2079:33;:::i;:::-;1975:143;;;;:::o;2141:732::-;2248:5;2273:81;2289:64;2346:6;2289:64;:::i;:::-;2273:81;:::i;:::-;2264:90;;2374:5;2403:6;2396:5;2389:21;2437:4;2430:5;2426:16;2419:23;;2490:4;2482:6;2478:17;2470:6;2466:30;2519:3;2511:6;2508:15;2505:122;;;2538:79;;:::i;:::-;2505:122;2653:6;2636:231;2670:6;2665:3;2662:15;2636:231;;;2745:3;2774:48;2818:3;2806:10;2774:48;:::i;:::-;2769:3;2762:61;2852:4;2847:3;2843:14;2836:21;;2712:155;2696:4;2691:3;2687:14;2680:21;;2636:231;;;2640:21;2254:619;;2141:732;;;;;:::o;2896:385::-;2978:5;3027:3;3020:4;3012:6;3008:17;3004:27;2994:122;;3035:79;;:::i;:::-;2994:122;3145:6;3139:13;3170:105;3271:3;3263:6;3256:4;3248:6;3244:17;3170:105;:::i;:::-;3161:114;;2984:297;2896:385;;;;:::o;3287:308::-;3361:4;3451:18;3443:6;3440:30;3437:56;;;3473:18;;:::i;:::-;3437:56;3523:4;3515:6;3511:17;3503:25;;3583:4;3577;3573:15;3565:23;;3287:308;;;:::o;3601:90::-;3635:7;3678:5;3671:13;3664:21;3653:32;;3601:90;;;:::o;3697:116::-;3767:21;3782:5;3767:21;:::i;:::-;3760:5;3757:32;3747:60;;3803:1;3800;3793:12;3747:60;3697:116;:::o;3819:137::-;3873:5;3904:6;3898:13;3889:22;;3920:30;3944:5;3920:30;:::i;:::-;3819:137;;;;:::o;3976:723::-;4080:5;4105:78;4121:61;4175:6;4121:61;:::i;:::-;4105:78;:::i;:::-;4096:87;;4203:5;4232:6;4225:5;4218:21;4266:4;4259:5;4255:16;4248:23;;4319:4;4311:6;4307:17;4299:6;4295:30;4348:3;4340:6;4337:15;4334:122;;;4367:79;;:::i;:::-;4334:122;4482:6;4465:228;4499:6;4494:3;4491:15;4465:228;;;4574:3;4603:45;4644:3;4632:10;4603:45;:::i;:::-;4598:3;4591:58;4678:4;4673:3;4669:14;4662:21;;4541:152;4525:4;4520:3;4516:14;4509:21;;4465:228;;;4469:21;4086:613;;3976:723;;;;;:::o;4719:379::-;4798:5;4847:3;4840:4;4832:6;4828:17;4824:27;4814:122;;4855:79;;:::i;:::-;4814:122;4965:6;4959:13;4990:102;5088:3;5080:6;5073:4;5065:6;5061:17;4990:102;:::i;:::-;4981:111;;4804:294;4719:379;;;;:::o;5104:77::-;5141:7;5170:5;5159:16;;5104:77;;;:::o;5187:122::-;5260:24;5278:5;5260:24;:::i;:::-;5253:5;5250:35;5240:63;;5299:1;5296;5289:12;5240:63;5187:122;:::o;5315:143::-;5372:5;5403:6;5397:13;5388:22;;5419:33;5446:5;5419:33;:::i;:::-;5315:143;;;;:::o;5464:1580::-;5642:6;5650;5658;5666;5674;5723:3;5711:9;5702:7;5698:23;5694:33;5691:120;;;5730:79;;:::i;:::-;5691:120;5871:1;5860:9;5856:17;5850:24;5901:18;5893:6;5890:30;5887:117;;;5923:79;;:::i;:::-;5887:117;6028:89;6109:7;6100:6;6089:9;6085:22;6028:89;:::i;:::-;6018:99;;5821:306;6187:2;6176:9;6172:18;6166:25;6218:18;6210:6;6207:30;6204:117;;;6240:79;;:::i;:::-;6204:117;6345:89;6426:7;6417:6;6406:9;6402:22;6345:89;:::i;:::-;6335:99;;6137:307;6504:2;6493:9;6489:18;6483:25;6535:18;6527:6;6524:30;6521:117;;;6557:79;;:::i;:::-;6521:117;6662:86;6740:7;6731:6;6720:9;6716:22;6662:86;:::i;:::-;6652:96;;6454:304;6797:2;6823:64;6879:7;6870:6;6859:9;6855:22;6823:64;:::i;:::-;6813:74;;6768:129;6936:3;6963:64;7019:7;7010:6;6999:9;6995:22;6963:64;:::i;:::-;6953:74;;6907:130;5464:1580;;;;;;;;:::o;7050:180::-;7098:77;7095:1;7088:88;7195:4;7192:1;7185:15;7219:4;7216:1;7209:15;7236:351;7306:6;7355:2;7343:9;7334:7;7330:23;7326:32;7323:119;;;7361:79;;:::i;:::-;7323:119;7481:1;7506:64;7562:7;7553:6;7542:9;7538:22;7506:64;:::i;:::-;7496:74;;7452:128;7236:351;;;;:::o;7593:180::-;7641:77;7638:1;7631:88;7738:4;7735:1;7728:15;7762:4;7759:1;7752:15;7779:191;7819:3;7838:20;7856:1;7838:20;:::i;:::-;7833:25;;7872:20;7890:1;7872:20;:::i;:::-;7867:25;;7915:1;7912;7908:9;7901:16;;7936:3;7933:1;7930:10;7927:36;;;7943:18;;:::i;:::-;7927:36;7779:191;;;;:::o;7976:114::-;8043:6;8077:5;8071:12;8061:22;;7976:114;;;:::o;8096:184::-;8195:11;8229:6;8224:3;8217:19;8269:4;8264:3;8260:14;8245:29;;8096:184;;;;:::o;8286:132::-;8353:4;8376:3;8368:11;;8406:4;8401:3;8397:14;8389:22;;8286:132;;;:::o;8424:108::-;8501:24;8519:5;8501:24;:::i;:::-;8496:3;8489:37;8424:108;;:::o;8538:179::-;8607:10;8628:46;8670:3;8662:6;8628:46;:::i;:::-;8706:4;8701:3;8697:14;8683:28;;8538:179;;;;:::o;8723:113::-;8793:4;8825;8820:3;8816:14;8808:22;;8723:113;;;:::o;8872:732::-;8991:3;9020:54;9068:5;9020:54;:::i;:::-;9090:86;9169:6;9164:3;9090:86;:::i;:::-;9083:93;;9200:56;9250:5;9200:56;:::i;:::-;9279:7;9310:1;9295:284;9320:6;9317:1;9314:13;9295:284;;;9396:6;9390:13;9423:63;9482:3;9467:13;9423:63;:::i;:::-;9416:70;;9509:60;9562:6;9509:60;:::i;:::-;9499:70;;9355:224;9342:1;9339;9335:9;9330:14;;9295:284;;;9299:14;9595:3;9588:10;;8996:608;;;8872:732;;;;:::o;9610:373::-;9753:4;9791:2;9780:9;9776:18;9768:26;;9840:9;9834:4;9830:20;9826:1;9815:9;9811:17;9804:47;9868:108;9971:4;9962:6;9868:108;:::i;:::-;9860:116;;9610:373;;;;:::o;9989:118::-;10026:7;10066:34;10059:5;10055:46;10044:57;;9989:118;;;:::o;10113:122::-;10186:24;10204:5;10186:24;:::i;:::-;10179:5;10176:35;10166:63;;10225:1;10222;10215:12;10166:63;10113:122;:::o;10241:143::-;10298:5;10329:6;10323:13;10314:22;;10345:33;10372:5;10345:33;:::i;:::-;10241:143;;;;:::o;10390:351::-;10460:6;10509:2;10497:9;10488:7;10484:23;10480:32;10477:119;;;10515:79;;:::i;:::-;10477:119;10635:1;10660:64;10716:7;10707:6;10696:9;10692:22;10660:64;:::i;:::-;10650:74;;10606:128;10390:351;;;;:::o;10747:114::-;10784:7;10824:30;10817:5;10813:42;10802:53;;10747:114;;;:::o;10867:122::-;10940:24;10958:5;10940:24;:::i;:::-;10933:5;10930:35;10920:63;;10979:1;10976;10969:12;10920:63;10867:122;:::o;10995:143::-;11052:5;11083:6;11077:13;11068:22;;11099:33;11126:5;11099:33;:::i;:::-;10995:143;;;;:::o;11144:93::-;11180:7;11220:10;11213:5;11209:22;11198:33;;11144:93;;;:::o;11243:120::-;11315:23;11332:5;11315:23;:::i;:::-;11308:5;11305:34;11295:62;;11353:1;11350;11343:12;11295:62;11243:120;:::o;11369:141::-;11425:5;11456:6;11450:13;11441:22;;11472:32;11498:5;11472:32;:::i;:::-;11369:141;;;;:::o;11516:661::-;11603:6;11611;11619;11668:2;11656:9;11647:7;11643:23;11639:32;11636:119;;;11674:79;;:::i;:::-;11636:119;11794:1;11819:64;11875:7;11866:6;11855:9;11851:22;11819:64;:::i;:::-;11809:74;;11765:128;11932:2;11958:64;12014:7;12005:6;11994:9;11990:22;11958:64;:::i;:::-;11948:74;;11903:129;12071:2;12097:63;12152:7;12143:6;12132:9;12128:22;12097:63;:::i;:::-;12087:73;;12042:128;11516:661;;;;;:::o;12183:86::-;12218:7;12258:4;12251:5;12247:16;12236:27;;12183:86;;;:::o;12275:191::-;12313:4;12333:18;12349:1;12333:18;:::i;:::-;12328:23;;12365:18;12381:1;12365:18;:::i;:::-;12360:23;;12407:1;12404;12400:9;12392:17;;12431:4;12425;12422:14;12419:40;;;12439:18;;:::i;:::-;12419:40;12275:191;;;;:::o;12472:102::-;12514:8;12561:5;12558:1;12554:13;12533:34;;12472:102;;;:::o;12580:848::-;12641:5;12648:4;12672:6;12663:15;;12696:5;12687:14;;12710:712;12731:1;12721:8;12718:15;12710:712;;;12826:4;12821:3;12817:14;12811:4;12808:24;12805:50;;;12835:18;;:::i;:::-;12805:50;12885:1;12875:8;12871:16;12868:451;;;13300:4;13293:5;13289:16;13280:25;;12868:451;13350:4;13344;13340:15;13332:23;;13380:32;13403:8;13380:32;:::i;:::-;13368:44;;12710:712;;;12580:848;;;;;;;:::o;13434:1073::-;13488:5;13679:8;13669:40;;13700:1;13691:10;;13702:5;;13669:40;13728:4;13718:36;;13745:1;13736:10;;13747:5;;13718:36;13814:4;13862:1;13857:27;;;;13898:1;13893:191;;;;13807:277;;13857:27;13875:1;13866:10;;13877:5;;;13893:191;13938:3;13928:8;13925:17;13922:43;;;13945:18;;:::i;:::-;13922:43;13994:8;13991:1;13987:16;13978:25;;14029:3;14022:5;14019:14;14016:40;;;14036:18;;:::i;:::-;14016:40;14069:5;;;13807:277;;14193:2;14183:8;14180:16;14174:3;14168:4;14165:13;14161:36;14143:2;14133:8;14130:16;14125:2;14119:4;14116:12;14112:35;14096:111;14093:246;;;14249:8;14243:4;14239:19;14230:28;;14284:3;14277:5;14274:14;14271:40;;;14291:18;;:::i;:::-;14271:40;14324:5;;14093:246;14364:42;14402:3;14392:8;14386:4;14383:1;14364:42;:::i;:::-;14349:57;;;;14438:4;14433:3;14429:14;14422:5;14419:25;14416:51;;;14447:18;;:::i;:::-;14416:51;14496:4;14489:5;14485:16;14476:25;;13434:1073;;;;;;:::o;14513:281::-;14571:5;14595:23;14613:4;14595:23;:::i;:::-;14587:31;;14639:25;14655:8;14639:25;:::i;:::-;14627:37;;14683:104;14720:66;14710:8;14704:4;14683:104;:::i;:::-;14674:113;;14513:281;;;;:::o;14800:180::-;14848:77;14845:1;14838:88;14945:4;14942:1;14935:15;14969:4;14966:1;14959:15;14986:185;15026:1;15043:20;15061:1;15043:20;:::i;:::-;15038:25;;15077:20;15095:1;15077:20;:::i;:::-;15072:25;;15116:1;15106:35;;15121:18;;:::i;:::-;15106:35;15163:1;15160;15156:9;15151:14;;14986:185;;;;:::o;15177:410::-;15217:7;15240:20;15258:1;15240:20;:::i;:::-;15235:25;;15274:20;15292:1;15274:20;:::i;:::-;15269:25;;15329:1;15326;15322:9;15351:30;15369:11;15351:30;:::i;:::-;15340:41;;15530:1;15521:7;15517:15;15514:1;15511:22;15491:1;15484:9;15464:83;15441:139;;15560:18;;:::i;:::-;15441:139;15225:362;15177:410;;;;:::o;15593:169::-;15677:11;15711:6;15706:3;15699:19;15751:4;15746:3;15742:14;15727:29;;15593:169;;;;:::o;15768:170::-;15908:22;15904:1;15896:6;15892:14;15885:46;15768:170;:::o;15944:366::-;16086:3;16107:67;16171:2;16166:3;16107:67;:::i;:::-;16100:74;;16183:93;16272:3;16183:93;:::i;:::-;16301:2;16296:3;16292:12;16285:19;;15944:366;;;:::o;16316:419::-;16482:4;16520:2;16509:9;16505:18;16497:26;;16569:9;16563:4;16559:20;16555:1;16544:9;16540:17;16533:47;16597:131;16723:4;16597:131;:::i;:::-;16589:139;;16316:419;;;:::o;16741:170::-;16881:22;16877:1;16869:6;16865:14;16858:46;16741:170;:::o;16917:366::-;17059:3;17080:67;17144:2;17139:3;17080:67;:::i;:::-;17073:74;;17156:93;17245:3;17156:93;:::i;:::-;17274:2;17269:3;17265:12;17258:19;;16917:366;;;:::o;17289:419::-;17455:4;17493:2;17482:9;17478:18;17470:26;;17542:9;17536:4;17532:20;17528:1;17517:9;17513:17;17506:47;17570:131;17696:4;17570:131;:::i;:::-;17562:139;;17289:419;;;:::o;17714:118::-;17801:24;17819:5;17801:24;:::i;:::-;17796:3;17789:37;17714:118;;:::o;17838:89::-;17874:7;17914:6;17907:5;17903:18;17892:29;;17838:89;;;:::o;17933:91::-;17969:7;18009:8;18002:5;17998:20;17987:31;;17933:91;;;:::o;18030:60::-;18058:3;18079:5;18072:12;;18030:60;;;:::o;18096:138::-;18144:9;18177:51;18194:33;18203:23;18220:5;18203:23;:::i;:::-;18194:33;:::i;:::-;18177:51;:::i;:::-;18164:64;;18096:138;;;:::o;18240:127::-;18325:35;18354:5;18325:35;:::i;:::-;18320:3;18313:48;18240:127;;:::o;18373:438::-;18520:4;18558:2;18547:9;18543:18;18535:26;;18571:71;18639:1;18628:9;18624:17;18615:6;18571:71;:::i;:::-;18652:72;18720:2;18709:9;18705:18;18696:6;18652:72;:::i;:::-;18734:70;18800:2;18789:9;18785:18;18776:6;18734:70;:::i;:::-;18373:438;;;;;;:::o;18817:332::-;18938:4;18976:2;18965:9;18961:18;18953:26;;18989:71;19057:1;19046:9;19042:17;19033:6;18989:71;:::i;:::-;19070:72;19138:2;19127:9;19123:18;19114:6;19070:72;:::i;:::-;18817:332;;;;;:::o;19155:222::-;19248:4;19286:2;19275:9;19271:18;19263:26;;19299:71;19367:1;19356:9;19352:17;19343:6;19299:71;:::i;:::-;19155:222;;;;:::o;19383:98::-;19434:6;19468:5;19462:12;19452:22;;19383:98;;;:::o;19487:147::-;19588:11;19625:3;19610:18;;19487:147;;;;:::o;19640:248::-;19722:1;19732:113;19746:6;19743:1;19740:13;19732:113;;;19831:1;19826:3;19822:11;19816:18;19812:1;19807:3;19803:11;19796:39;19768:2;19765:1;19761:10;19756:15;;19732:113;;;19879:1;19870:6;19865:3;19861:16;19854:27;19702:186;19640:248;;;:::o;19894:386::-;19998:3;20026:38;20058:5;20026:38;:::i;:::-;20080:88;20161:6;20156:3;20080:88;:::i;:::-;20073:95;;20177:65;20235:6;20230:3;20223:4;20216:5;20212:16;20177:65;:::i;:::-;20267:6;20262:3;20258:16;20251:23;;20002:278;19894:386;;;;:::o;20286:271::-;20416:3;20438:93;20527:3;20518:6;20438:93;:::i;:::-;20431:100;;20548:3;20541:10;;20286:271;;;;:::o;20563:351::-;20633:6;20682:2;20670:9;20661:7;20657:23;20653:32;20650:119;;;20688:79;;:::i;:::-;20650:119;20808:1;20833:64;20889:7;20880:6;20869:9;20865:22;20833:64;:::i;:::-;20823:74;;20779:128;20563:351;;;;:::o;20920:122::-;20993:24;21011:5;20993:24;:::i;:::-;20986:5;20983:35;20973:63;;21032:1;21029;21022:12;20973:63;20920:122;:::o;21048:143::-;21105:5;21136:6;21130:13;21121:22;;21152:33;21179:5;21152:33;:::i;:::-;21048:143;;;;:::o;21197:90::-;21232:7;21275:5;21272:1;21261:20;21250:31;;21197:90;;;:::o;21293:118::-;21364:22;21380:5;21364:22;:::i;:::-;21357:5;21354:33;21344:61;;21401:1;21398;21391:12;21344:61;21293:118;:::o;21417:139::-;21472:5;21503:6;21497:13;21488:22;;21519:31;21544:5;21519:31;:::i;:::-;21417:139;;;;:::o;21562:120::-;21634:23;21651:5;21634:23;:::i;:::-;21627:5;21624:34;21614:62;;21672:1;21669;21662:12;21614:62;21562:120;:::o;21688:141::-;21744:5;21775:6;21769:13;21760:22;;21791:32;21817:5;21791:32;:::i;:::-;21688:141;;;;:::o;21835:118::-;21906:22;21922:5;21906:22;:::i;:::-;21899:5;21896:33;21886:61;;21943:1;21940;21933:12;21886:61;21835:118;:::o;21959:139::-;22014:5;22045:6;22039:13;22030:22;;22061:31;22086:5;22061:31;:::i;:::-;21959:139;;;;:::o;22104:1271::-;22218:6;22226;22234;22242;22250;22258;22266;22315:3;22303:9;22294:7;22290:23;22286:33;22283:120;;;22322:79;;:::i;:::-;22283:120;22442:1;22467:64;22523:7;22514:6;22503:9;22499:22;22467:64;:::i;:::-;22457:74;;22413:128;22580:2;22606:62;22660:7;22651:6;22640:9;22636:22;22606:62;:::i;:::-;22596:72;;22551:127;22717:2;22743:63;22798:7;22789:6;22778:9;22774:22;22743:63;:::i;:::-;22733:73;;22688:128;22855:2;22881:63;22936:7;22927:6;22916:9;22912:22;22881:63;:::i;:::-;22871:73;;22826:128;22993:3;23020:63;23075:7;23066:6;23055:9;23051:22;23020:63;:::i;:::-;23010:73;;22964:129;23132:3;23159:62;23213:7;23204:6;23193:9;23189:22;23159:62;:::i;:::-;23149:72;;23103:128;23270:3;23297:61;23350:7;23341:6;23330:9;23326:22;23297:61;:::i;:::-;23287:71;;23241:127;22104:1271;;;;;;;;;;:::o;23381:180::-;23429:77;23426:1;23419:88;23526:4;23523:1;23516:15;23550:4;23547:1;23540:15;23567:347;23635:6;23684:2;23672:9;23663:7;23659:23;23655:32;23652:119;;;23690:79;;:::i;:::-;23652:119;23810:1;23835:62;23889:7;23880:6;23869:9;23865:22;23835:62;:::i;:::-;23825:72;;23781:126;23567:347;;;;:::o;23920:158::-;24060:10;24056:1;24048:6;24044:14;24037:34;23920:158;:::o;24084:365::-;24226:3;24247:66;24311:1;24306:3;24247:66;:::i;:::-;24240:73;;24322:93;24411:3;24322:93;:::i;:::-;24440:2;24435:3;24431:12;24424:19;;24084:365;;;:::o;24455:419::-;24621:4;24659:2;24648:9;24644:18;24636:26;;24708:9;24702:4;24698:20;24694:1;24683:9;24679:17;24672:47;24736:131;24862:4;24736:131;:::i;:::-;24728:139;;24455:419;;;:::o","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80630ed45c8e14610030575b600080fd5b61004a600480360381019061004591906100f2565b610060565b604051610057919061014a565b60405180910390f35b60006020528060005260406000206000915054906101000a90046fffffffffffffffffffffffffffffffff1681565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100bf82610094565b9050919050565b6100cf816100b4565b81146100da57600080fd5b50565b6000813590506100ec816100c6565b92915050565b6000602082840312156101085761010761008f565b5b6000610116848285016100dd565b91505092915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6101448161011f565b82525050565b600060208201905061015f600083018461013b565b9291505056fea2646970667358221220a4e6dd2393001a9d6159335353b0372a5cd8cc21c588644e6d3591c024feb6bf64736f6c634300081a0033","sourceMap":"64:17178:26:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;233:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:28:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:118::-;1213:7;1253:34;1246:5;1242:46;1231:57;;1176:118;;;:::o;1300:::-;1387:24;1405:5;1387:24;:::i;:::-;1382:3;1375:37;1300:118;;:::o;1424:222::-;1517:4;1555:2;1544:9;1540:18;1532:26;;1568:71;1636:1;1625:9;1621:17;1612:6;1568:71;:::i;:::-;1424:222;;;;:::o","linkReferences":{}},"methodIdentifiers":{"tokenToWethPrices(address)":"0ed45c8e"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"dexes\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"dexIsUniV3\",\"type\":\"bool[]\"},{\"internalType\":\"address\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wethInPoolThreshold\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenToWethPrices\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/GetWethValueInPoolBatchRequest.sol\":\"GetWethValueInPoolBatchRequest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/GetWethValueInPoolBatchRequest.sol\":{\"keccak256\":\"0xf59500b9c78a1cc1bb82a10dbcec5da37f503e7eab9a5f5eac1c950916979e40\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ea1d2bfc57e77c7d8eb5c302bd4bbe677b85e0ea88ecbbcb5353f4316af40a5f\",\"dweb:/ipfs/QmSGpcM3kLFJAPtK4wXGJKZmwDDTZeDZCUaPmXwjGN6U5J\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"},{"internalType":"address[]","name":"dexes","type":"address[]"},{"internalType":"bool[]","name":"dexIsUniV3","type":"bool[]"},{"internalType":"address","name":"weth","type":"address"},{"internalType":"uint256","name":"wethInPoolThreshold","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"tokenToWethPrices","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/GetWethValueInPoolBatchRequest.sol":"GetWethValueInPoolBatchRequest"},"evmVersion":"paris","libraries":{}},"sources":{"src/GetWethValueInPoolBatchRequest.sol":{"keccak256":"0xf59500b9c78a1cc1bb82a10dbcec5da37f503e7eab9a5f5eac1c950916979e40","urls":["bzz-raw://ea1d2bfc57e77c7d8eb5c302bd4bbe677b85e0ea88ecbbcb5353f4316af40a5f","dweb:/ipfs/QmSGpcM3kLFJAPtK4wXGJKZmwDDTZeDZCUaPmXwjGN6U5J"],"license":"UNLICENSED"}},"version":1},"id":26} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"pools","type":"address[]","internalType":"address[]"},{"name":"dexes","type":"address[]","internalType":"address[]"},{"name":"dexIsUniV3","type":"bool[]","internalType":"bool[]"},{"name":"weth","type":"address","internalType":"address"},{"name":"wethInPoolThreshold","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"tokenToWethPrices","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"}],"bytecode":{"object":"0x608060405234801561000f575f80fd5b506040516123a23803806123a283398181016040528101906100319190611983565b5f855167ffffffffffffffff81111561004d5761004c6116c5565b5b60405190808252806020026020018201604052801561007b5781602001602082028036833780820191505090505b5090505f5b865181101561036d576100b287828151811061009f5761009e611a4e565b5b602002602001015161039b60201b60201c565b156100dc575f8282815181106100cb576100ca611a4e565b5b602002602001018181525050610362565b6101058782815181106100f2576100f1611a4e565b5b602002602001015161044760201b60201c565b610340575f87828151811061011d5761011c611a4e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561016d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101919190611a7b565b90505f8883815181106101a7576101a6611a4e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021b9190611a7b565b905061022c8261044760201b60201c565b15801561024557506102438161044760201b60201c565b155b15610318575f806102778b868151811061026257610261611a4e565b5b6020026020010151858561047860201b60201c565b915091505f610290858a858e8e8d61052560201b60201c565b90505f6102a7858b858f8f8e61052560201b60201c565b90505f82141580156102b957505f8114155b156102ee5780826102ca9190611ad3565b8888815181106102dd576102dc611a4e565b5b60200260200101818152505061030f565b5f88888151811061030257610301611a4e565b5b6020026020010181815250505b50505050610339565b5f84848151811061032c5761032b611a4e565b5b6020026020010181815250505b5050610361565b5f82828151811061035457610353611a4e565b5b6020026020010181815250505b5b806001019050610080565b505f816040516020016103809190611bbd565b60405160208183030381529060405290506020810180590381f35b5f6103ab826106b460201b60201c565b61043e575f8273ffffffffffffffffffffffffffffffffffffffff16631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061041d9190611c22565b6fffffffffffffffffffffffffffffffff160361043d5760019050610442565b5b5f90505b919050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b0361046f5760019050610473565b5f90505b919050565b5f805f8061048d8787876106ee60201b60201c565b9150915061051782828773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16106104cf57876104d1565b885b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161061050a578961050c565b885b61088360201b60201c565b935093505050935093915050565b5f8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603610561578490506106aa565b5f805f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a90046fffffffffffffffffffffffffffffffff1690506001816fffffffffffffffffffffffffffffffff16036105df575f9150506106aa565b5f816fffffffffffffffffffffffffffffffff161461061057610608818761098460201b60201c565b9150506106aa565b5f5b85518110156106a4575f6106638a8a89858151811061063457610633611a4e565b5b602002602001015189868151811061064f5761064e611a4e565b5b602002602001015189610ad060201b60201c565b90505f816fffffffffffffffffffffffffffffffff16146106985761068e818961098460201b60201c565b93505050506106aa565b50806001019050610612565b505f9150505b9695505050505050565b5f807fddca3f43000000000000000000000000000000000000000000000000000000005f525f8060045f80875af190508015915050919050565b5f808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061072a57828461072d565b83835b80945081955050505f80610746876106b460201b60201c565b156107ec575f808873ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610796573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ba9190611cc9565b5091509150816dffffffffffffffffffffffffffff169350806dffffffffffffffffffffffffffff1692505050610873565b5f806107fe888a610e5860201b60201c565b915091505f80610814898c610e5860201b60201c565b915091508280156108225750805b1561086e578873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1610156108665783955081945061086d565b8394508195505b5b505050505b8181935093505050935093915050565b5f805f8061089686610fa460201b60201c565b915091505f806108ab87610fa460201b60201c565b915091508280156108b95750805b156109775760128460ff1611156108f3576012846108d79190611d25565b600a6108e39190611e88565b8a6108ee9190611eff565b610918565b8360126109009190611d25565b600a61090c9190611e88565b8a6109179190611f2f565b5b955060128260ff16111561094f576012826109339190611d25565b600a61093f9190611e88565b8961094a9190611eff565b610974565b81601261095c9190611d25565b600a6109689190611e88565b896109739190611f2f565b5b94505b5050505094509492505050565b5f808214806109a457505f836fffffffffffffffffffffffffffffffff16145b156109b1575f9050610aca565b5f60406fffffffffffffffffffffffffffffffff8416856fffffffffffffffffffffffffffffffff1602901c90505f608084901c856fffffffffffffffffffffffffffffffff1602905077ffffffffffffffffffffffffffffffffffffffffffffffff811115610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d90611fca565b60405180910390fd5b604081901b9050817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03811115610ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab990612032565b60405180910390fd5b818101925050505b92915050565b5f8215610c9f575f60405180606001604052806101f461ffff168152602001610bb861ffff16815260200161271061ffff1681525090505f5b6003811015610c98575f8673ffffffffffffffffffffffffffffffffffffffff16631698ee828973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1610610b685789610b6a565b8a5b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1610610ba3578b610ba5565b8a5b868660038110610bb857610bb7611a4e565b5b60200201516040518463ffffffff1660e01b8152600401610bdb939291906120b3565b602060405180830381865afa158015610bf6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1a9190611a7b565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c8c575f610c63878b8b858a61110860201b60201c565b90505f816fffffffffffffffffffffffffffffffff1614610c8a5780945050505050610e4f565b505b50806001019050610b09565b5050610dd8565b5f8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161090505f8573ffffffffffffffffffffffffffffffffffffffff1663e6a4390583610cf95788610cfb565b895b84610d06578a610d08565b895b6040518363ffffffff1660e01b8152600401610d259291906120e8565b602060405180830381865afa158015610d40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d649190611a7b565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610dd5575f610dad868a8a858961110860201b60201c565b90505f816fffffffffffffffffffffffffffffffff1614610dd357809350505050610e4f565b505b50505b60015f808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505f90505b95945050505050565b5f805f808573ffffffffffffffffffffffffffffffffffffffff1685604051602401610e84919061210f565b6040516020818303038152906040527f70a08231000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610f0e919061217a565b5f604051808303815f865af19150503d805f8114610f47576040519150601f19603f3d011682016040523d82523d5f602084013e610f4c565b606091505b50915091508115610f94575f6020825103610f865781806020019051810190610f759190612190565b905080600194509450505050610f9d565b5f8094509450505050610f9d565b5f809350935050505b9250929050565b5f805f808473ffffffffffffffffffffffffffffffffffffffff16614e206040516024016040516020818303038152906040527f313ce567000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611052919061217a565b5f604051808303815f8787f1925050503d805f811461108c576040519150601f19603f3d011682016040523d82523d5f602084013e611091565b606091505b509150915081156110fa575f60208251036110ec57818060200190518101906110ba9190612190565b90505f8114806110ca575060ff81115b156110dd575f8094509450505050611103565b80600194509450505050611103565b5f8094509450505050611103565b5f809350935050505b915091565b5f808473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16109050866111ba575f8061115386898961047860201b60201c565b9150915082156111755784811015611170575f93505050506112be565b611189565b84821015611188575f93505050506112be565b5b6111b1836111975782611199565b815b846111a457826111a6565b835b6112c760201b60201c565b9350505061124a565b5f8473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611204573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611228919061226f565b5050505050509050604061124482848a8a6114a960201b60201c565b901c9250505b815f808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505b95945050505050565b5f8082036112d7575f90506114a3565b5f77ffffffffffffffffffffffffffffffffffffffffffffffff84116113135782604085901b8161130b5761130a611ed2565b5b04905061147d565b5f60c090505f60c086901c9050640100000000811061133a57602081901c90506020820191505b62010000811061135257601081901c90506010820191505b610100811061136957600881901c90506008820191505b6010811061137f57600481901c90506004820191505b6004811061139557600281901c90506002820191505b600281106113a4576001820191505b600160bf830360018703901c018260ff0387901b816113c6576113c5611ed2565b5b0492506fffffffffffffffffffffffffffffffff8311156113ec575f93505050506114a3565b5f608086901c840290505f6fffffffffffffffffffffffffffffffff8716850290505f60c089901c90505f60408a901b90508281101561142d576001820391505b8281039050608084901b925082811015611448576001820391505b8281039050608084901c82146114615761146061230c565b5b88818161147157611470611ed2565b5b04870196505050505050505b6fffffffffffffffffffffffffffffffff81111561149e575f9150506114a3565b809150505b92915050565b5f808573ffffffffffffffffffffffffffffffffffffffff16036114cf575f9050611698565b5f806114e085610fa460201b60201c565b915091505f806114f586610fa460201b60201c565b915091508280156115035750805b611513575f945050505050611698565b5f82850390505f80825f0b1261154a578160ff16600a0a60028c73ffffffffffffffffffffffffffffffffffffffff160a0261157d565b815f0360ff16600a0a60028c73ffffffffffffffffffffffffffffffffffffffff160a8161157b5761157a611ed2565b5b045b90505f8a6115dc576c010000000000000000000000006080816115a3576115a2611ed2565b5b0482901b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff816115d6576115d5611ed2565b5b046115ff565b6c010000000000000000000000006080816115fa576115f9611ed2565b5b0482901b5b90508a61160c578061162b565b6c01000000000000000000000000818161162957611628611ed2565b5b045b97507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff881115611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168790612383565b60405180910390fd5b505050505050505b949350505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6116fb826116b5565b810181811067ffffffffffffffff8211171561171a576117196116c5565b5b80604052505050565b5f61172c6116a0565b905061173882826116f2565b919050565b5f67ffffffffffffffff821115611757576117566116c5565b5b602082029050602081019050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117958261176c565b9050919050565b6117a58161178b565b81146117af575f80fd5b50565b5f815190506117c08161179c565b92915050565b5f6117d86117d38461173d565b611723565b905080838252602082019050602084028301858111156117fb576117fa611768565b5b835b81811015611824578061181088826117b2565b8452602084019350506020810190506117fd565b5050509392505050565b5f82601f830112611842576118416116b1565b5b81516118528482602086016117c6565b91505092915050565b5f67ffffffffffffffff821115611875576118746116c5565b5b602082029050602081019050919050565b5f8115159050919050565b61189a81611886565b81146118a4575f80fd5b50565b5f815190506118b581611891565b92915050565b5f6118cd6118c88461185b565b611723565b905080838252602082019050602084028301858111156118f0576118ef611768565b5b835b81811015611919578061190588826118a7565b8452602084019350506020810190506118f2565b5050509392505050565b5f82601f830112611937576119366116b1565b5b81516119478482602086016118bb565b91505092915050565b5f819050919050565b61196281611950565b811461196c575f80fd5b50565b5f8151905061197d81611959565b92915050565b5f805f805f60a0868803121561199c5761199b6116a9565b5b5f86015167ffffffffffffffff8111156119b9576119b86116ad565b5b6119c58882890161182e565b955050602086015167ffffffffffffffff8111156119e6576119e56116ad565b5b6119f28882890161182e565b945050604086015167ffffffffffffffff811115611a1357611a126116ad565b5b611a1f88828901611923565b9350506060611a30888289016117b2565b9250506080611a418882890161196f565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215611a9057611a8f6116a9565b5b5f611a9d848285016117b2565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611add82611950565b9150611ae883611950565b9250828201905080821115611b0057611aff611aa6565b5b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611b3881611950565b82525050565b5f611b498383611b2f565b60208301905092915050565b5f602082019050919050565b5f611b6b82611b06565b611b758185611b10565b9350611b8083611b20565b805f5b83811015611bb0578151611b978882611b3e565b9750611ba283611b55565b925050600181019050611b83565b5085935050505092915050565b5f6020820190508181035f830152611bd58184611b61565b905092915050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b611c0181611bdd565b8114611c0b575f80fd5b50565b5f81519050611c1c81611bf8565b92915050565b5f60208284031215611c3757611c366116a9565b5b5f611c4484828501611c0e565b91505092915050565b5f6dffffffffffffffffffffffffffff82169050919050565b611c6f81611c4d565b8114611c79575f80fd5b50565b5f81519050611c8a81611c66565b92915050565b5f63ffffffff82169050919050565b611ca881611c90565b8114611cb2575f80fd5b50565b5f81519050611cc381611c9f565b92915050565b5f805f60608486031215611ce057611cdf6116a9565b5b5f611ced86828701611c7c565b9350506020611cfe86828701611c7c565b9250506040611d0f86828701611cb5565b9150509250925092565b5f60ff82169050919050565b5f611d2f82611d19565b9150611d3a83611d19565b9250828203905060ff811115611d5357611d52611aa6565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115611dae57808604811115611d8a57611d89611aa6565b5b6001851615611d995780820291505b8081029050611da785611d59565b9450611d6e565b94509492505050565b5f82611dc65760019050611e81565b81611dd3575f9050611e81565b8160018114611de95760028114611df357611e22565b6001915050611e81565b60ff841115611e0557611e04611aa6565b5b8360020a915084821115611e1c57611e1b611aa6565b5b50611e81565b5060208310610133831016604e8410600b8410161715611e575782820a905083811115611e5257611e51611aa6565b5b611e81565b611e648484846001611d65565b92509050818404811115611e7b57611e7a611aa6565b5b81810290505b9392505050565b5f611e9282611950565b9150611e9d83611d19565b9250611eca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611db7565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611f0982611950565b9150611f1483611950565b925082611f2457611f23611ed2565b5b828204905092915050565b5f611f3982611950565b9150611f4483611950565b9250828202611f5281611950565b91508282048414831517611f6957611f68611aa6565b5b5092915050565b5f82825260208201905092915050565b7f6f766572666c6f772d3020696e206d756c3634750000000000000000000000005f82015250565b5f611fb4601483611f70565b9150611fbf82611f80565b602082019050919050565b5f6020820190508181035f830152611fe181611fa8565b9050919050565b7f6f766572666c6f772d3120696e206d756c3634750000000000000000000000005f82015250565b5f61201c601483611f70565b915061202782611fe8565b602082019050919050565b5f6020820190508181035f83015261204981612010565b9050919050565b6120598161178b565b82525050565b5f61ffff82169050919050565b5f62ffffff82169050919050565b5f819050919050565b5f61209d6120986120938461205f565b61207a565b61206c565b9050919050565b6120ad81612083565b82525050565b5f6060820190506120c65f830186612050565b6120d36020830185612050565b6120e060408301846120a4565b949350505050565b5f6040820190506120fb5f830185612050565b6121086020830184612050565b9392505050565b5f6020820190506121225f830184612050565b92915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f61215482612128565b61215e8185612132565b935061216e81856020860161213c565b80840191505092915050565b5f612185828461214a565b915081905092915050565b5f602082840312156121a5576121a46116a9565b5b5f6121b28482850161196f565b91505092915050565b6121c48161176c565b81146121ce575f80fd5b50565b5f815190506121df816121bb565b92915050565b5f8160020b9050919050565b6121fa816121e5565b8114612204575f80fd5b50565b5f81519050612215816121f1565b92915050565b6122248161205f565b811461222e575f80fd5b50565b5f8151905061223f8161221b565b92915050565b61224e81611d19565b8114612258575f80fd5b50565b5f8151905061226981612245565b92915050565b5f805f805f805f60e0888a03121561228a576122896116a9565b5b5f6122978a828b016121d1565b97505060206122a88a828b01612207565b96505060406122b98a828b01612231565b95505060606122ca8a828b01612231565b94505060806122db8a828b01612231565b93505060a06122ec8a828b0161225b565b92505060c06122fd8a828b016118a7565b91505092959891949750929550565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b7f4f766572666c6f770000000000000000000000000000000000000000000000005f82015250565b5f61236d600883611f70565b915061237882612339565b602082019050919050565b5f6020820190508181035f83015261239a81612361565b905091905056fe","sourceMap":"64:17440:28:-:0;;;292:2380;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;477:33;527:5;:12;513:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;477:63;;556:9;551:1578;575:5;:12;571:1;:16;551:1578;;;612:17;620:5;626:1;620:8;;;;;;;;:::i;:::-;;;;;;;;612:7;;;:17;;:::i;:::-;608:105;;;671:1;649:16;666:1;649:19;;;;;;;;:::i;:::-;;;;;;;:23;;;;;690:8;;608:105;787:24;802:5;808:1;802:8;;;;;;;;:::i;:::-;;;;;;;;787:14;;;:24;;:::i;:::-;782:1337;;831:14;863:5;869:1;863:8;;;;;;;;:::i;:::-;;;;;;;;848:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;831:50;;899:14;931:5;937:1;931:8;;;;;;;;:::i;:::-;;;;;;;;916:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;899:50;;973:22;988:6;973:14;;;:22;;:::i;:::-;972:23;:50;;;;;1000:22;1015:6;1000:14;;;:22;;:::i;:::-;999:23;972:50;968:1075;;;1101:10;1113;1127:47;1149:5;1155:1;1149:8;;;;;;;;:::i;:::-;;;;;;;;1159:6;1167;1127:21;;;:47;;:::i;:::-;1100:74;;;;1267:29;1323:77;1343:6;1351:4;1357:2;1361:5;1368:10;1380:19;1323;;;:77;;:::i;:::-;1267:133;;1423:29;1479:77;1499:6;1507:4;1513:2;1517:5;1524:10;1536:19;1479;;;:77;;:::i;:::-;1423:133;;1608:1;1583:21;:26;;:56;;;;;1638:1;1613:21;:26;;1583:56;1579:376;;;1833:21;1809;:45;;;;:::i;:::-;1787:16;1804:1;1787:19;;;;;;;;:::i;:::-;;;;;;;:67;;;;;1579:376;;;1931:1;1909:16;1926:1;1909:19;;;;;;;;:::i;:::-;;;;;;;:23;;;;;1579:376;1024:949;;;;968:1075;;;2023:1;2001:16;2018:1;2001:19;;;;;;;;:::i;:::-;;;;;;;:23;;;;;968:1075;813:1244;;782:1337;;;2103:1;2081:16;2098:1;2081:19;;;;;;;;:::i;:::-;;;;;;;:23;;;;;782:1337;551:1578;589:3;;;;;551:1578;;;;2331:27;2372:16;2361:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;2331:58;;2596:4;2580:14;2576:25;2645:9;2636:7;2632:23;2621:9;2614:42;2678:257;2725:4;2774:16;2787:2;2774:12;;;:16;;:::i;:::-;2769:137;;2849:1;2830:2;2810:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;;2806:90;;2877:4;2870:11;;;;2806:90;2769:137;2923:5;2916:12;;2678:257;;;;:::o;17309:193::-;17372:4;17414:1;17392:6;:18;;;:23;17388:108;;17438:4;17431:11;;;;17388:108;17480:5;17473:12;;17309:193;;;;:::o;8410:303::-;8503:7;8512;8532:11;8545;8560:31;8572:2;8576:6;8584;8560:11;;;:31;;:::i;:::-;8531:60;;;;8609:97;8627:3;8632;8646:6;8637:15;;:6;:15;;;:33;;8664:6;8637:33;;;8655:6;8637:33;8681:6;8672:15;;:6;:15;;;:33;;8699:6;8672:33;;;8690:6;8672:33;8609:17;;;:97;;:::i;:::-;8602:104;;;;;;8410:303;;;;;;:::o;2941:1632::-;3166:7;3492:4;3483:13;;:5;:13;;;3479:57;;3519:6;3512:13;;;;3479:57;3546:24;3573:17;:24;3591:5;3573:24;;;;;;;;;;;;;;;;;;;;;;;;;3546:51;;3741:1;3721:16;:21;;;3717:850;;3765:1;3758:8;;;;;3717:850;3931:1;3911:16;:21;;;3907:558;;3959:32;3966:16;3984:6;3959;;;:32;;:::i;:::-;3952:39;;;;;3907:558;4163:9;4158:293;4182:5;:12;4178:1;:16;4158:293;;;4223:13;4239:78;4259:5;4266:4;4272:5;4278:1;4272:8;;;;;;;;:::i;:::-;;;;;;;;4282:10;4293:1;4282:13;;;;;;;;:::i;:::-;;;;;;;;4297:19;4239;;;:78;;:::i;:::-;4223:94;;4353:1;4344:5;:10;;;4340:93;;4389:21;4396:5;4403:6;4389;;;:21;;:::i;:::-;4382:28;;;;;;;4340:93;4201:250;4196:3;;;;;4158:293;;;;4555:1;4548:8;;;2941:1632;;;;;;;;;:::o;16380:923::-;16432:4;16448:12;16556:66;16550:4;16543:80;17050:4;17007;16912;16816;16781:1;16734:2;16690:5;16664:425;16637:452;;17289:7;17288:8;17281:15;;;16380:923;;;:::o;7448:956::-;7531:7;7540;7588:6;7579:15;;:6;:15;;;7578:55;;7618:6;7626;7578:55;;;7599:6;7607;7578:55;7559:74;;;;;;;;7644:11;7665;7691:16;7704:2;7691:12;;;:16;;:::i;:::-;7687:683;;;7724:15;7741;7776:2;7761:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7723:70;;;;;7813:7;7807:13;;;;7840:7;7834:13;;;;7709:149;;7687:683;;;7879:25;7906:13;7923:30;7942:6;7950:2;7923:18;;;:30;;:::i;:::-;7878:75;;;;7968:25;7995:13;8012:30;8031:6;8039:2;8012:18;;;:30;;:::i;:::-;7967:75;;;;8061:8;:20;;;;;8073:8;8061:20;8057:303;;;8114:6;8105:15;;:6;:15;;;8101:245;;;8150:17;8144:23;;8195:17;8189:23;;8101:245;;;8265:17;8259:23;;8310:17;8304:23;;8101:245;8057:303;7864:506;;;;7687:683;8388:3;8393;8380:17;;;;;;7448:956;;;;;;:::o;8719:563::-;8834:11;8847;8875:20;8897:8;8909:30;8932:6;8909:22;;;:30;;:::i;:::-;8874:65;;;;8950:20;8972:8;8984:30;9007:6;8984:22;;;:30;;:::i;:::-;8949:65;;;;9029:3;:10;;;;;9036:3;9029:10;9025:251;;;9079:2;9061:14;:20;;;;:92;;9149:2;9132:14;:19;;;;:::i;:::-;9125:2;:27;;;;:::i;:::-;9120:1;:33;;;;:::i;:::-;9061:92;;;9101:14;9096:2;:19;;;;:::i;:::-;9089:2;:27;;;;:::i;:::-;9084:1;:33;;;;:::i;:::-;9061:92;9055:98;;9191:2;9173:14;:20;;;;:92;;9261:2;9244:14;:19;;;;:::i;:::-;9237:2;:27;;;;:::i;:::-;9232:1;:33;;;;:::i;:::-;9173:92;;;9213:14;9208:2;:19;;;;:::i;:::-;9201:2;:27;;;;:::i;:::-;9196:1;:33;;;;:::i;:::-;9173:92;9167:98;;9025:251;8864:418;;;;8719:563;;;;;;;:::o;15552:632::-;15613:7;15665:1;15660;:6;:16;;;;15675:1;15670;:6;;;15660:16;15656:63;;;15703:1;15696:8;;;;15656:63;15733:10;15805:2;15765:34;15761:1;:38;15755:1;15747:10;;:53;15746:61;;15733:74;;15821:10;15853:3;15848:1;:8;;15842:1;15834:10;;:23;15821:36;;15886:50;15880:2;:56;;15872:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;15982:2;15975:9;;;;;16099:2;16030:66;:71;16024:2;:77;;15999:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;16165:2;16160;:7;16153:14;;;;15552:632;;;;;:::o;4579:1562::-;4764:7;4787;4783:1185;;;4810:25;:46;;;;;;;;4839:3;4810:46;;;;;;4844:4;4810:46;;;;;;4850:5;4810:46;;;;;;;4875:9;4870:608;4894:15;4890:1;:19;4870:608;;;4934:19;4974:10;4956:37;;;5023:4;5015:12;;:5;:12;;;:27;;5038:4;5015:27;;;5030:5;5015:27;5052:4;5044:12;;:5;:12;;;:27;;5066:5;5044:27;;;5059:4;5044:27;5073:8;5082:1;5073:11;;;;;;;:::i;:::-;;;;;;4956:146;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4934:168;;224:1;5125:27;;:11;:27;;;5121:343;;5247:13;5263:83;5291:7;5300:5;5307:4;5313:11;5326:19;5263:27;;;:83;;:::i;:::-;5247:99;;5382:1;5373:5;:10;;;5369:77;;5418:5;5411:12;;;;;;;;5369:77;5154:310;5121:343;4916:562;4911:3;;;;;4870:608;;;;4796:692;4783:1185;;;5508:18;5537:4;5529:12;;:5;:12;;;5508:33;;5556:19;5612:10;5594:37;;;5632:13;:28;;5656:4;5632:28;;;5648:5;5632:28;5662:13;:28;;5685:5;5662:28;;;5678:4;5662:28;5594:97;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5556:135;;224:1;5710:27;;:11;:27;;;5706:252;;5757:13;5773:83;5801:7;5810:5;5817:4;5823:11;5836:19;5773:27;;;:83;;:::i;:::-;5757:99;;5888:1;5879:5;:10;;;5875:69;;5920:5;5913:12;;;;;;;5875:69;5739:219;5706:252;5494:474;;4783:1185;6115:1;6088:17;:24;6106:5;6088:24;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;6133:1;6126:8;;4579:1562;;;;;;;;:::o;14730:598::-;14814:7;14823:4;14840:21;14863:26;14905:5;:10;;14962:13;14916:60;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14905:72;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14839:138;;;;14992:16;14988:334;;;15024:15;15082:2;15058:13;:20;:26;15054:210;;15127:13;15116:36;;;;;;;;;;;;:::i;:::-;15104:48;;15179:7;15188:4;15171:22;;;;;;;;;15054:210;15240:1;15243:5;15232:17;;;;;;;;;14988:334;15302:1;15305:5;15294:17;;;;;;14730:598;;;;;;:::o;13854:762::-;13919:5;13926:4;13943:25;13970:30;14016:5;:10;;14032:5;14039:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14016:61;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13942:135;;;;14092:20;14088:522;;;14128:21;14196:2;14168:17;:24;:30;14164:388;;14247:17;14236:40;;;;;;;;;;;;:::i;:::-;14218:58;;14316:1;14299:13;:18;:41;;;;14337:3;14321:13;:19;14299:41;14295:187;;;14372:1;14375:5;14364:17;;;;;;;;;14295:187;14442:13;14458:4;14428:35;;;;;;;;;14164:388;14528:1;14531:5;14520:17;;;;;;;;;14088:522;14590:1;14593:5;14582:17;;;;;;13854:762;;;;:::o;6147:1295::-;6337:13;6362:18;6391:4;6383:12;;:5;:12;;;6362:33;;6410:7;6405:931;;6434:11;6447;6462:40;6484:4;6490:5;6497:4;6462:21;;;:40;;:::i;:::-;6433:69;;;;6808:13;6804:255;;;6851:22;6845:3;:28;6841:83;;;6904:1;6897:8;;;;;;;6841:83;6804:255;;;6972:22;6966:3;:28;6962:83;;;7025:1;7018:8;;;;;;;6962:83;6804:255;7081:59;7087:13;:25;;7109:3;7087:25;;;7103:3;7087:25;7114:13;:25;;7136:3;7114:25;;;7130:3;7114:25;7081:5;;;:59;;:::i;:::-;7073:67;;6419:732;;6405:931;;;7172:20;7222:4;7202:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7171:64;;;;;;;;7322:2;7265:53;7277:12;7291:13;7306:5;7313:4;7265:11;;;:53;;:::i;:::-;:59;;7249:76;;7157:179;6405:931;7430:5;7403:17;:24;7421:5;7403:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;6352:1090;6147:1295;;;;;;;;:::o;11226:2514::-;11286:7;11338:1;11333;:6;11329:20;;11348:1;11341:8;;;;11329:20;11364:14;11402:50;11397:1;:55;11393:1967;;11493:1;11487:2;11482:1;:7;;11481:13;;;;;:::i;:::-;;;11472:22;;11393:1967;;;11533:11;11547:3;11533:17;;11568:10;11586:3;11581:1;:8;;11568:21;;11617:11;11611:2;:17;11607:104;;11659:2;11652:9;;;;;11690:2;11683:9;;;;11607:104;11738:7;11732:2;:13;11728:100;;11776:2;11769:9;;;;;11807:2;11800:9;;;;11728:100;11855:5;11849:2;:11;11845:96;;11891:1;11884:8;;;;;11921:1;11914:8;;;;11845:96;11968:4;11962:2;:10;11958:95;;12003:1;11996:8;;;;;12033:1;12026:8;;;;11958:95;12080:3;12074:2;:9;12070:94;;12114:1;12107:8;;;;;12144:1;12137:8;;;;12070:94;12191:3;12185:2;:9;12181:23;;12203:1;12196:8;;;;12181:23;12312:1;12304:3;12298;:9;12291:1;12287;:5;12286:22;;12285:28;12276:3;12270;:9;12264:1;:16;;12263:51;;;;;:::i;:::-;;;12254:60;;12740:34;12731:6;:43;12727:98;;;12805:1;12798:8;;;;;;;12727:98;12843:10;12871:3;12866:1;:8;;12856:6;:19;12843:32;;12893:10;12920:34;12916:1;:38;12906:6;:49;12893:62;;12974:10;12992:3;12987:1;:8;;12974:21;;13013:10;13031:2;13026:1;:7;;13013:20;;13061:2;13056;:7;13052:20;;;13071:1;13065:7;;;;13052:20;13096:2;13090:8;;;;13164:3;13158:2;:9;;13153:14;;13194:2;13189;:7;13185:20;;;13204:1;13198:7;;;;13185:20;13229:2;13223:8;;;;13306:3;13300:2;:9;;13294:2;:15;13287:23;;;;:::i;:::-;;13344:1;13339:2;:6;;;;;:::i;:::-;;;13329:16;;;;11515:1845;;;;;;11393:1967;13610:34;13601:6;:43;13597:90;;;13671:1;13664:8;;;;;13597:90;13716:6;13701:22;;;11226:2514;;;;;:::o;9288:1743::-;9420:17;9497:1;9481:12;:17;;;9477:64;;9525:1;9518:8;;;;9477:64;9556:20;9578:8;9590:30;9613:6;9590:22;;;:30;;:::i;:::-;9555:65;;;;9635:20;9657:8;9669:30;9692:6;9669:22;;;:30;;:::i;:::-;9634:65;;;;9813:3;:10;;;;;9820:3;9813:10;9807:60;;9851:1;9844:8;;;;;;;;9807:60;10053:17;10101:14;10078;10073:43;10053:63;;10227:23;10268:1;10253:12;:16;;;:174;;10414:12;10402:25;;:2;:25;10398:1;10381:12;10373:21;;:26;:54;10253:174;;;10340:12;10339:13;;10317:37;;10325:2;10317:37;10313:1;10296:12;10288:21;;:26;:66;;;;;:::i;:::-;;;10253:174;10227:200;;10577:28;10624:16;:100;;142:27;10714:3;:9;;;;;:::i;:::-;;;10695:15;:28;;10674:17;:50;;;;;:::i;:::-;;;10624:100;;;142:27;10662:3;:9;;;;;:::i;:::-;;;10643:15;:28;;10624:100;10577:147;;10881:16;:68;;10929:20;10881:68;;;142:27;10900:20;:26;;;;;:::i;:::-;;;10881:68;10869:80;;10984:17;10971:9;:30;;10963:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;9453:1572;;;;;;;9288:1743;;;;;;;:::o;7:75:31:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:311::-;1250:4;1340:18;1332:6;1329:30;1326:56;;;1362:18;;:::i;:::-;1326:56;1412:4;1404:6;1400:17;1392:25;;1472:4;1466;1462:15;1454:23;;1173:311;;;:::o;1490:117::-;1599:1;1596;1589:12;1613:126;1650:7;1690:42;1683:5;1679:54;1668:65;;1613:126;;;:::o;1745:96::-;1782:7;1811:24;1829:5;1811:24;:::i;:::-;1800:35;;1745:96;;;:::o;1847:122::-;1920:24;1938:5;1920:24;:::i;:::-;1913:5;1910:35;1900:63;;1959:1;1956;1949:12;1900:63;1847:122;:::o;1975:143::-;2032:5;2063:6;2057:13;2048:22;;2079:33;2106:5;2079:33;:::i;:::-;1975:143;;;;:::o;2141:732::-;2248:5;2273:81;2289:64;2346:6;2289:64;:::i;:::-;2273:81;:::i;:::-;2264:90;;2374:5;2403:6;2396:5;2389:21;2437:4;2430:5;2426:16;2419:23;;2490:4;2482:6;2478:17;2470:6;2466:30;2519:3;2511:6;2508:15;2505:122;;;2538:79;;:::i;:::-;2505:122;2653:6;2636:231;2670:6;2665:3;2662:15;2636:231;;;2745:3;2774:48;2818:3;2806:10;2774:48;:::i;:::-;2769:3;2762:61;2852:4;2847:3;2843:14;2836:21;;2712:155;2696:4;2691:3;2687:14;2680:21;;2636:231;;;2640:21;2254:619;;2141:732;;;;;:::o;2896:385::-;2978:5;3027:3;3020:4;3012:6;3008:17;3004:27;2994:122;;3035:79;;:::i;:::-;2994:122;3145:6;3139:13;3170:105;3271:3;3263:6;3256:4;3248:6;3244:17;3170:105;:::i;:::-;3161:114;;2984:297;2896:385;;;;:::o;3287:308::-;3361:4;3451:18;3443:6;3440:30;3437:56;;;3473:18;;:::i;:::-;3437:56;3523:4;3515:6;3511:17;3503:25;;3583:4;3577;3573:15;3565:23;;3287:308;;;:::o;3601:90::-;3635:7;3678:5;3671:13;3664:21;3653:32;;3601:90;;;:::o;3697:116::-;3767:21;3782:5;3767:21;:::i;:::-;3760:5;3757:32;3747:60;;3803:1;3800;3793:12;3747:60;3697:116;:::o;3819:137::-;3873:5;3904:6;3898:13;3889:22;;3920:30;3944:5;3920:30;:::i;:::-;3819:137;;;;:::o;3976:723::-;4080:5;4105:78;4121:61;4175:6;4121:61;:::i;:::-;4105:78;:::i;:::-;4096:87;;4203:5;4232:6;4225:5;4218:21;4266:4;4259:5;4255:16;4248:23;;4319:4;4311:6;4307:17;4299:6;4295:30;4348:3;4340:6;4337:15;4334:122;;;4367:79;;:::i;:::-;4334:122;4482:6;4465:228;4499:6;4494:3;4491:15;4465:228;;;4574:3;4603:45;4644:3;4632:10;4603:45;:::i;:::-;4598:3;4591:58;4678:4;4673:3;4669:14;4662:21;;4541:152;4525:4;4520:3;4516:14;4509:21;;4465:228;;;4469:21;4086:613;;3976:723;;;;;:::o;4719:379::-;4798:5;4847:3;4840:4;4832:6;4828:17;4824:27;4814:122;;4855:79;;:::i;:::-;4814:122;4965:6;4959:13;4990:102;5088:3;5080:6;5073:4;5065:6;5061:17;4990:102;:::i;:::-;4981:111;;4804:294;4719:379;;;;:::o;5104:77::-;5141:7;5170:5;5159:16;;5104:77;;;:::o;5187:122::-;5260:24;5278:5;5260:24;:::i;:::-;5253:5;5250:35;5240:63;;5299:1;5296;5289:12;5240:63;5187:122;:::o;5315:143::-;5372:5;5403:6;5397:13;5388:22;;5419:33;5446:5;5419:33;:::i;:::-;5315:143;;;;:::o;5464:1580::-;5642:6;5650;5658;5666;5674;5723:3;5711:9;5702:7;5698:23;5694:33;5691:120;;;5730:79;;:::i;:::-;5691:120;5871:1;5860:9;5856:17;5850:24;5901:18;5893:6;5890:30;5887:117;;;5923:79;;:::i;:::-;5887:117;6028:89;6109:7;6100:6;6089:9;6085:22;6028:89;:::i;:::-;6018:99;;5821:306;6187:2;6176:9;6172:18;6166:25;6218:18;6210:6;6207:30;6204:117;;;6240:79;;:::i;:::-;6204:117;6345:89;6426:7;6417:6;6406:9;6402:22;6345:89;:::i;:::-;6335:99;;6137:307;6504:2;6493:9;6489:18;6483:25;6535:18;6527:6;6524:30;6521:117;;;6557:79;;:::i;:::-;6521:117;6662:86;6740:7;6731:6;6720:9;6716:22;6662:86;:::i;:::-;6652:96;;6454:304;6797:2;6823:64;6879:7;6870:6;6859:9;6855:22;6823:64;:::i;:::-;6813:74;;6768:129;6936:3;6963:64;7019:7;7010:6;6999:9;6995:22;6963:64;:::i;:::-;6953:74;;6907:130;5464:1580;;;;;;;;:::o;7050:180::-;7098:77;7095:1;7088:88;7195:4;7192:1;7185:15;7219:4;7216:1;7209:15;7236:351;7306:6;7355:2;7343:9;7334:7;7330:23;7326:32;7323:119;;;7361:79;;:::i;:::-;7323:119;7481:1;7506:64;7562:7;7553:6;7542:9;7538:22;7506:64;:::i;:::-;7496:74;;7452:128;7236:351;;;;:::o;7593:180::-;7641:77;7638:1;7631:88;7738:4;7735:1;7728:15;7762:4;7759:1;7752:15;7779:191;7819:3;7838:20;7856:1;7838:20;:::i;:::-;7833:25;;7872:20;7890:1;7872:20;:::i;:::-;7867:25;;7915:1;7912;7908:9;7901:16;;7936:3;7933:1;7930:10;7927:36;;;7943:18;;:::i;:::-;7927:36;7779:191;;;;:::o;7976:114::-;8043:6;8077:5;8071:12;8061:22;;7976:114;;;:::o;8096:184::-;8195:11;8229:6;8224:3;8217:19;8269:4;8264:3;8260:14;8245:29;;8096:184;;;;:::o;8286:132::-;8353:4;8376:3;8368:11;;8406:4;8401:3;8397:14;8389:22;;8286:132;;;:::o;8424:108::-;8501:24;8519:5;8501:24;:::i;:::-;8496:3;8489:37;8424:108;;:::o;8538:179::-;8607:10;8628:46;8670:3;8662:6;8628:46;:::i;:::-;8706:4;8701:3;8697:14;8683:28;;8538:179;;;;:::o;8723:113::-;8793:4;8825;8820:3;8816:14;8808:22;;8723:113;;;:::o;8872:732::-;8991:3;9020:54;9068:5;9020:54;:::i;:::-;9090:86;9169:6;9164:3;9090:86;:::i;:::-;9083:93;;9200:56;9250:5;9200:56;:::i;:::-;9279:7;9310:1;9295:284;9320:6;9317:1;9314:13;9295:284;;;9396:6;9390:13;9423:63;9482:3;9467:13;9423:63;:::i;:::-;9416:70;;9509:60;9562:6;9509:60;:::i;:::-;9499:70;;9355:224;9342:1;9339;9335:9;9330:14;;9295:284;;;9299:14;9595:3;9588:10;;8996:608;;;8872:732;;;;:::o;9610:373::-;9753:4;9791:2;9780:9;9776:18;9768:26;;9840:9;9834:4;9830:20;9826:1;9815:9;9811:17;9804:47;9868:108;9971:4;9962:6;9868:108;:::i;:::-;9860:116;;9610:373;;;;:::o;9989:118::-;10026:7;10066:34;10059:5;10055:46;10044:57;;9989:118;;;:::o;10113:122::-;10186:24;10204:5;10186:24;:::i;:::-;10179:5;10176:35;10166:63;;10225:1;10222;10215:12;10166:63;10113:122;:::o;10241:143::-;10298:5;10329:6;10323:13;10314:22;;10345:33;10372:5;10345:33;:::i;:::-;10241:143;;;;:::o;10390:351::-;10460:6;10509:2;10497:9;10488:7;10484:23;10480:32;10477:119;;;10515:79;;:::i;:::-;10477:119;10635:1;10660:64;10716:7;10707:6;10696:9;10692:22;10660:64;:::i;:::-;10650:74;;10606:128;10390:351;;;;:::o;10747:114::-;10784:7;10824:30;10817:5;10813:42;10802:53;;10747:114;;;:::o;10867:122::-;10940:24;10958:5;10940:24;:::i;:::-;10933:5;10930:35;10920:63;;10979:1;10976;10969:12;10920:63;10867:122;:::o;10995:143::-;11052:5;11083:6;11077:13;11068:22;;11099:33;11126:5;11099:33;:::i;:::-;10995:143;;;;:::o;11144:93::-;11180:7;11220:10;11213:5;11209:22;11198:33;;11144:93;;;:::o;11243:120::-;11315:23;11332:5;11315:23;:::i;:::-;11308:5;11305:34;11295:62;;11353:1;11350;11343:12;11295:62;11243:120;:::o;11369:141::-;11425:5;11456:6;11450:13;11441:22;;11472:32;11498:5;11472:32;:::i;:::-;11369:141;;;;:::o;11516:661::-;11603:6;11611;11619;11668:2;11656:9;11647:7;11643:23;11639:32;11636:119;;;11674:79;;:::i;:::-;11636:119;11794:1;11819:64;11875:7;11866:6;11855:9;11851:22;11819:64;:::i;:::-;11809:74;;11765:128;11932:2;11958:64;12014:7;12005:6;11994:9;11990:22;11958:64;:::i;:::-;11948:74;;11903:129;12071:2;12097:63;12152:7;12143:6;12132:9;12128:22;12097:63;:::i;:::-;12087:73;;12042:128;11516:661;;;;;:::o;12183:86::-;12218:7;12258:4;12251:5;12247:16;12236:27;;12183:86;;;:::o;12275:191::-;12313:4;12333:18;12349:1;12333:18;:::i;:::-;12328:23;;12365:18;12381:1;12365:18;:::i;:::-;12360:23;;12407:1;12404;12400:9;12392:17;;12431:4;12425;12422:14;12419:40;;;12439:18;;:::i;:::-;12419:40;12275:191;;;;:::o;12472:102::-;12514:8;12561:5;12558:1;12554:13;12533:34;;12472:102;;;:::o;12580:848::-;12641:5;12648:4;12672:6;12663:15;;12696:5;12687:14;;12710:712;12731:1;12721:8;12718:15;12710:712;;;12826:4;12821:3;12817:14;12811:4;12808:24;12805:50;;;12835:18;;:::i;:::-;12805:50;12885:1;12875:8;12871:16;12868:451;;;13300:4;13293:5;13289:16;13280:25;;12868:451;13350:4;13344;13340:15;13332:23;;13380:32;13403:8;13380:32;:::i;:::-;13368:44;;12710:712;;;12580:848;;;;;;;:::o;13434:1073::-;13488:5;13679:8;13669:40;;13700:1;13691:10;;13702:5;;13669:40;13728:4;13718:36;;13745:1;13736:10;;13747:5;;13718:36;13814:4;13862:1;13857:27;;;;13898:1;13893:191;;;;13807:277;;13857:27;13875:1;13866:10;;13877:5;;;13893:191;13938:3;13928:8;13925:17;13922:43;;;13945:18;;:::i;:::-;13922:43;13994:8;13991:1;13987:16;13978:25;;14029:3;14022:5;14019:14;14016:40;;;14036:18;;:::i;:::-;14016:40;14069:5;;;13807:277;;14193:2;14183:8;14180:16;14174:3;14168:4;14165:13;14161:36;14143:2;14133:8;14130:16;14125:2;14119:4;14116:12;14112:35;14096:111;14093:246;;;14249:8;14243:4;14239:19;14230:28;;14284:3;14277:5;14274:14;14271:40;;;14291:18;;:::i;:::-;14271:40;14324:5;;14093:246;14364:42;14402:3;14392:8;14386:4;14383:1;14364:42;:::i;:::-;14349:57;;;;14438:4;14433:3;14429:14;14422:5;14419:25;14416:51;;;14447:18;;:::i;:::-;14416:51;14496:4;14489:5;14485:16;14476:25;;13434:1073;;;;;;:::o;14513:281::-;14571:5;14595:23;14613:4;14595:23;:::i;:::-;14587:31;;14639:25;14655:8;14639:25;:::i;:::-;14627:37;;14683:104;14720:66;14710:8;14704:4;14683:104;:::i;:::-;14674:113;;14513:281;;;;:::o;14800:180::-;14848:77;14845:1;14838:88;14945:4;14942:1;14935:15;14969:4;14966:1;14959:15;14986:185;15026:1;15043:20;15061:1;15043:20;:::i;:::-;15038:25;;15077:20;15095:1;15077:20;:::i;:::-;15072:25;;15116:1;15106:35;;15121:18;;:::i;:::-;15106:35;15163:1;15160;15156:9;15151:14;;14986:185;;;;:::o;15177:410::-;15217:7;15240:20;15258:1;15240:20;:::i;:::-;15235:25;;15274:20;15292:1;15274:20;:::i;:::-;15269:25;;15329:1;15326;15322:9;15351:30;15369:11;15351:30;:::i;:::-;15340:41;;15530:1;15521:7;15517:15;15514:1;15511:22;15491:1;15484:9;15464:83;15441:139;;15560:18;;:::i;:::-;15441:139;15225:362;15177:410;;;;:::o;15593:169::-;15677:11;15711:6;15706:3;15699:19;15751:4;15746:3;15742:14;15727:29;;15593:169;;;;:::o;15768:170::-;15908:22;15904:1;15896:6;15892:14;15885:46;15768:170;:::o;15944:366::-;16086:3;16107:67;16171:2;16166:3;16107:67;:::i;:::-;16100:74;;16183:93;16272:3;16183:93;:::i;:::-;16301:2;16296:3;16292:12;16285:19;;15944:366;;;:::o;16316:419::-;16482:4;16520:2;16509:9;16505:18;16497:26;;16569:9;16563:4;16559:20;16555:1;16544:9;16540:17;16533:47;16597:131;16723:4;16597:131;:::i;:::-;16589:139;;16316:419;;;:::o;16741:170::-;16881:22;16877:1;16869:6;16865:14;16858:46;16741:170;:::o;16917:366::-;17059:3;17080:67;17144:2;17139:3;17080:67;:::i;:::-;17073:74;;17156:93;17245:3;17156:93;:::i;:::-;17274:2;17269:3;17265:12;17258:19;;16917:366;;;:::o;17289:419::-;17455:4;17493:2;17482:9;17478:18;17470:26;;17542:9;17536:4;17532:20;17528:1;17517:9;17513:17;17506:47;17570:131;17696:4;17570:131;:::i;:::-;17562:139;;17289:419;;;:::o;17714:118::-;17801:24;17819:5;17801:24;:::i;:::-;17796:3;17789:37;17714:118;;:::o;17838:89::-;17874:7;17914:6;17907:5;17903:18;17892:29;;17838:89;;;:::o;17933:91::-;17969:7;18009:8;18002:5;17998:20;17987:31;;17933:91;;;:::o;18030:60::-;18058:3;18079:5;18072:12;;18030:60;;;:::o;18096:138::-;18144:9;18177:51;18194:33;18203:23;18220:5;18203:23;:::i;:::-;18194:33;:::i;:::-;18177:51;:::i;:::-;18164:64;;18096:138;;;:::o;18240:127::-;18325:35;18354:5;18325:35;:::i;:::-;18320:3;18313:48;18240:127;;:::o;18373:438::-;18520:4;18558:2;18547:9;18543:18;18535:26;;18571:71;18639:1;18628:9;18624:17;18615:6;18571:71;:::i;:::-;18652:72;18720:2;18709:9;18705:18;18696:6;18652:72;:::i;:::-;18734:70;18800:2;18789:9;18785:18;18776:6;18734:70;:::i;:::-;18373:438;;;;;;:::o;18817:332::-;18938:4;18976:2;18965:9;18961:18;18953:26;;18989:71;19057:1;19046:9;19042:17;19033:6;18989:71;:::i;:::-;19070:72;19138:2;19127:9;19123:18;19114:6;19070:72;:::i;:::-;18817:332;;;;;:::o;19155:222::-;19248:4;19286:2;19275:9;19271:18;19263:26;;19299:71;19367:1;19356:9;19352:17;19343:6;19299:71;:::i;:::-;19155:222;;;;:::o;19383:98::-;19434:6;19468:5;19462:12;19452:22;;19383:98;;;:::o;19487:147::-;19588:11;19625:3;19610:18;;19487:147;;;;:::o;19640:139::-;19729:6;19724:3;19719;19713:23;19770:1;19761:6;19756:3;19752:16;19745:27;19640:139;;;:::o;19785:386::-;19889:3;19917:38;19949:5;19917:38;:::i;:::-;19971:88;20052:6;20047:3;19971:88;:::i;:::-;19964:95;;20068:65;20126:6;20121:3;20114:4;20107:5;20103:16;20068:65;:::i;:::-;20158:6;20153:3;20149:16;20142:23;;19893:278;19785:386;;;;:::o;20177:271::-;20307:3;20329:93;20418:3;20409:6;20329:93;:::i;:::-;20322:100;;20439:3;20432:10;;20177:271;;;;:::o;20454:351::-;20524:6;20573:2;20561:9;20552:7;20548:23;20544:32;20541:119;;;20579:79;;:::i;:::-;20541:119;20699:1;20724:64;20780:7;20771:6;20760:9;20756:22;20724:64;:::i;:::-;20714:74;;20670:128;20454:351;;;;:::o;20811:122::-;20884:24;20902:5;20884:24;:::i;:::-;20877:5;20874:35;20864:63;;20923:1;20920;20913:12;20864:63;20811:122;:::o;20939:143::-;20996:5;21027:6;21021:13;21012:22;;21043:33;21070:5;21043:33;:::i;:::-;20939:143;;;;:::o;21088:90::-;21123:7;21166:5;21163:1;21152:20;21141:31;;21088:90;;;:::o;21184:118::-;21255:22;21271:5;21255:22;:::i;:::-;21248:5;21245:33;21235:61;;21292:1;21289;21282:12;21235:61;21184:118;:::o;21308:139::-;21363:5;21394:6;21388:13;21379:22;;21410:31;21435:5;21410:31;:::i;:::-;21308:139;;;;:::o;21453:120::-;21525:23;21542:5;21525:23;:::i;:::-;21518:5;21515:34;21505:62;;21563:1;21560;21553:12;21505:62;21453:120;:::o;21579:141::-;21635:5;21666:6;21660:13;21651:22;;21682:32;21708:5;21682:32;:::i;:::-;21579:141;;;;:::o;21726:118::-;21797:22;21813:5;21797:22;:::i;:::-;21790:5;21787:33;21777:61;;21834:1;21831;21824:12;21777:61;21726:118;:::o;21850:139::-;21905:5;21936:6;21930:13;21921:22;;21952:31;21977:5;21952:31;:::i;:::-;21850:139;;;;:::o;21995:1271::-;22109:6;22117;22125;22133;22141;22149;22157;22206:3;22194:9;22185:7;22181:23;22177:33;22174:120;;;22213:79;;:::i;:::-;22174:120;22333:1;22358:64;22414:7;22405:6;22394:9;22390:22;22358:64;:::i;:::-;22348:74;;22304:128;22471:2;22497:62;22551:7;22542:6;22531:9;22527:22;22497:62;:::i;:::-;22487:72;;22442:127;22608:2;22634:63;22689:7;22680:6;22669:9;22665:22;22634:63;:::i;:::-;22624:73;;22579:128;22746:2;22772:63;22827:7;22818:6;22807:9;22803:22;22772:63;:::i;:::-;22762:73;;22717:128;22884:3;22911:63;22966:7;22957:6;22946:9;22942:22;22911:63;:::i;:::-;22901:73;;22855:129;23023:3;23050:62;23104:7;23095:6;23084:9;23080:22;23050:62;:::i;:::-;23040:72;;22994:128;23161:3;23188:61;23241:7;23232:6;23221:9;23217:22;23188:61;:::i;:::-;23178:71;;23132:127;21995:1271;;;;;;;;;;:::o;23272:180::-;23320:77;23317:1;23310:88;23417:4;23414:1;23407:15;23441:4;23438:1;23431:15;23458:158;23598:10;23594:1;23586:6;23582:14;23575:34;23458:158;:::o;23622:365::-;23764:3;23785:66;23849:1;23844:3;23785:66;:::i;:::-;23778:73;;23860:93;23949:3;23860:93;:::i;:::-;23978:2;23973:3;23969:12;23962:19;;23622:365;;;:::o;23993:419::-;24159:4;24197:2;24186:9;24182:18;24174:26;;24246:9;24240:4;24236:20;24232:1;24221:9;24217:17;24210:47;24274:131;24400:4;24274:131;:::i;:::-;24266:139;;23993:419;;;:::o","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c80630ed45c8e1461002d575b5f80fd5b610047600480360381019061004291906100e6565b61005d565b604051610054919061013b565b60405180910390f35b5f602052805f5260405f205f915054906101000a90046fffffffffffffffffffffffffffffffff1681565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100b58261008c565b9050919050565b6100c5816100ab565b81146100cf575f80fd5b50565b5f813590506100e0816100bc565b92915050565b5f602082840312156100fb576100fa610088565b5b5f610108848285016100d2565b91505092915050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b61013581610111565b82525050565b5f60208201905061014e5f83018461012c565b9291505056fea2646970667358221220099dc160bd87a4f08a4f9d0511c3651ca94cdad799b22393ce4f35e4f24b91aa64736f6c634300081a0033","sourceMap":"64:17440:28:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;233:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:31:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:118::-;1213:7;1253:34;1246:5;1242:46;1231:57;;1176:118;;;:::o;1300:::-;1387:24;1405:5;1387:24;:::i;:::-;1382:3;1375:37;1300:118;;:::o;1424:222::-;1517:4;1555:2;1544:9;1540:18;1532:26;;1568:71;1636:1;1625:9;1621:17;1612:6;1568:71;:::i;:::-;1424:222;;;;:::o","linkReferences":{}},"methodIdentifiers":{"tokenToWethPrices(address)":"0ed45c8e"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"dexes\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"dexIsUniV3\",\"type\":\"bool[]\"},{\"internalType\":\"address\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wethInPoolThreshold\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenToWethPrices\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/GetWethValueInPoolBatchRequest.sol\":\"GetWethValueInPoolBatchRequest\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/GetWethValueInPoolBatchRequest.sol\":{\"keccak256\":\"0x5f3343a49f4534342c92af848d4da6cb3a1ec1a10e49001b156cb579206f7829\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://351053d4fc9eb05debc24ae1c56225a299144ceefae3820d33bb79f40a600fb1\",\"dweb:/ipfs/QmR7DCJEimp7oKDwwfjYpygqsa5dL71VUSwYixGceWP9HE\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"},{"internalType":"address[]","name":"dexes","type":"address[]"},{"internalType":"bool[]","name":"dexIsUniV3","type":"bool[]"},{"internalType":"address","name":"weth","type":"address"},{"internalType":"uint256","name":"wethInPoolThreshold","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"tokenToWethPrices","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/GetWethValueInPoolBatchRequest.sol":"GetWethValueInPoolBatchRequest"},"evmVersion":"cancun","libraries":{}},"sources":{"src/GetWethValueInPoolBatchRequest.sol":{"keccak256":"0x5f3343a49f4534342c92af848d4da6cb3a1ec1a10e49001b156cb579206f7829","urls":["bzz-raw://351053d4fc9eb05debc24ae1c56225a299144ceefae3820d33bb79f40a600fb1","dweb:/ipfs/QmR7DCJEimp7oKDwwfjYpygqsa5dL71VUSwYixGceWP9HE"],"license":"UNLICENSED"}},"version":1},"id":28} \ No newline at end of file From 6649d4346c3ecbe1b8e49deb25df53d69d95b742 Mon Sep 17 00:00:00 2001 From: 0xDmtri <0xDmtri@protonmail.com> Date: Tue, 4 Jun 2024 22:40:16 +0200 Subject: [PATCH 9/9] rust test for weth value --- src/filters/value.rs | 83 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/src/filters/value.rs b/src/filters/value.rs index 79828b69..9228d22b 100644 --- a/src/filters/value.rs +++ b/src/filters/value.rs @@ -206,3 +206,86 @@ where Ok(weth_value_in_pools) } + +#[cfg(test)] +mod test { + + use alloy::{ + primitives::{address, uint}, + providers::ProviderBuilder, + rpc::client::WsConnect, + }; + use std::{path::Path, sync::Arc}; + + use super::*; + use crate::amm::{ + uniswap_v2::factory::UniswapV2Factory, uniswap_v3::factory::UniswapV3Factory, + }; + use crate::sync::{checkpoint::sync_amms_from_checkpoint, sync_amms}; + + const WETH_VALUE_THREASHOLD: U256 = uint!(1_000_000_000_000_000_000_U256); + const MIN_TOKEN_PRICE_IN_WETH: U256 = uint!(0_U256); + const WETH_ADDRESS: Address = address!("C02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"); + const CHECKPOINT_PATH: &str = ".temp-checkpoint.json"; + + #[tokio::test] + #[ignore] // Ignoring to not throttle the Provider on workflows + async fn test_weth_value_filter() { + let ipc_endpoint = std::env::var("WS").unwrap(); + let ws = WsConnect::new(ipc_endpoint.to_owned()); + let provider = Arc::new(ProviderBuilder::new().on_ws(ws).await.unwrap()); + + let factories = vec![ + // Add Uniswap V2 + Factory::UniswapV2Factory(UniswapV2Factory::new( + address!("5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f"), + 10000835, + 300, + )), + // Add Uniswap v3 + Factory::UniswapV3Factory(UniswapV3Factory::new( + address!("1F98431c8aD98523631AE4a59f267346ea31F984"), + 12369621, + )), + ]; + + let checkpoint_exists = Path::new(CHECKPOINT_PATH).exists(); + + // sync all markets + let markets = if checkpoint_exists { + tracing::info!("Syncing pools from checkpoint"); + let (_, markets) = sync_amms_from_checkpoint(CHECKPOINT_PATH, 500, provider.clone()) + .await + .unwrap(); + + markets + } else { + tracing::info!("Syncing pools from inception"); + let (markets, _) = sync_amms( + factories.clone(), + provider.clone(), + Some(CHECKPOINT_PATH), + 500, + ) + .await + .unwrap(); + + markets + }; + + filter_amms_below_weth_threshold( + markets, + &factories, + WETH_ADDRESS, + WETH_VALUE_THREASHOLD, + MIN_TOKEN_PRICE_IN_WETH, + 500, + provider.clone(), + ) + .await + .unwrap(); + } + + #[tokio::test] + async fn test_usd_value_filter() {} +}