From 35a97914c9b2fcd27372a124bc8749f0ea850adb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Duarte?=
<15343819+jmg-duarte@users.noreply.github.com>
Date: Wed, 13 May 2026 16:53:29 +0100
Subject: [PATCH 1/2] Upgrade to v2.361.1 (#12)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Make alloy gas estimator configurable (#4081)
# Description
Adds the ability to configure past_blocks and reward_percentile
parameters for the EIP-1559 gas price estimator. Previously, alloy's
hardcoded defaults (10 blocks, 20th percentile) were always used.
# Changes
[x] Add configurable_alloy.rs - a gas estimator that calls
eth_feeHistory with custom parameters, then uses alloy's default
estimation algorithm
[x] Extend GasEstimatorType::Alloy config variant with optional
past-blocks and reward-percentile fields
[x] Default values match alloy's hardcoded constants (10 blocks, 20.0
percentile) for backwards compatibility
* Improve handling of unverifiable quotes (#4085)
# Description
Currently the quote verification leads to weird results - especially for
Ondo tokens. Routing these tokens requires the use of a proprietary API
which does not give out usable call data without an actual trade intent.
To adhere to the API solvers simply leave the execution plan of their
solution blank (pre interactions, regular interactions, JIT orders).
Normally this would lead to a revert in the trade simulation which would
in turn cause our system to keep the quotes but mark them as
unverifiable.
However, if the settlement contract has enough buy_tokens to pay for the
entire quoted amount the simulation will not revert but the analysis
afterwards will sniff out that the quote is giving money away for free.
This will then lead to the quote getting discarded entirely.
This causes 2 main issues:
1. it is possible to get a `fast` quote (which skips verification
alltogether) and then end up with `NoLiquidity` errors for `optimal`
quotes which is confusing
2. said `NoLiquidity` errors then prevent users from placing orders
# Changes
Since this needs to be resolved urgently I went for a relatively simple
approach where we detect whether a solution contains any execution plan
at all. Now we only discard quotes that are too inaccurate if the solver
actually tried to provide such a plan. If no plan is provided we simply
assume it's because no plan could be provided.
Note that there is still an incentive to provide verifiable calldata
because any verifiable quote will be preferred over any non-verifiable
quote. So solvers that don't make the effort to provide the calldata
will basically never win quotes for trades where it's possible to
provide calldata.
Minor other changes:
* renamed `Error::TooInaccurate` to `Error::BuffersPayForOrder` to
hopefully make the error case more self explanatory
* adjusted some getter functions to return `impl Iterator` instead of
`Vec` to avoid unnecessary cloning
## How to test
This is very hard to test with unit or e2e tests. Given how small the
actual change is I think existing e2e tests should be enough to cover
the correctness of the regular case and a deployment to prod will show
if we now indeed handle the Ondo token case better.
* Log solve request data transfer (#4082)
# Description
Some solvers reported that some requests come significantly delayed
(judging by the auction deadline). Currently we have no way to
distinguish between receiving the start of the `/solve` request and
streaming the actual data.
This PR makes this possible by making the `solve` handler take a raw
http request and stream the body afterwards.
# Changes
Instead of:
1. collecting the whole body into a `String` (including utf8 check)
2. logging that we received a request
3. putting that `String` into an `Arc` to make copying it cheap
4. deserializing the string into a `SolveRequest`
We now do:
1. receive raw http request
2. log that we received it
3. stream the body into a cheaply copyable `Bytes` type
4. log how long the data transfer took
5. deserialize raw bytes into `SolveRequest`
Since handling the raw request seems to bypass axum's request size
checks I did it manually for this endpoint.
## How to test
Existing tests should suffice
---------
Co-authored-by: ilya
* Replace RPC mempool API with in-memory tracking (#4086)
# Description
In order to know which gas price we have to beat at least (in case of
cancellations) we made the driver scan the RPC node's mempool using the
respective API as this is the ultimate source of truth.
However, this has 2 issues:
1. not widely supported
2. introduces latency (apparently up to 2s on mainnet at times)
Especially the latency seemingly causes us to not notify the connected
solver about the tx submission at times. The submission process works as
follows:
1. driver receives a `/settle` call and starts the submission
2. driver does the usual tx submission where it monitors the submission
deadline and initiate the cancellation if necessary
3. due to an [issue](https://github.com/cowprotocol/services/pull/3427)
with dead block streams the driver also monitors if the autopilot is
still waiting for the response for the `/settle` call
4. if the autopilot terminates the `/settle` call the driver only polls
the submission future for 1 more second but otherwise simply stops
polling it
([code](https://github.com/cowprotocol/services/blob/main/crates/driver/src/domain/competition/mod.rs#L630-L643))
Usually the submission future and autopilot detect the breach of the
submission deadline at the same time so the settle future naturally
executes the cancellation logic during that grace period. However, with
the latency introduced by the mempool API this grace period is often not
sufficient anymore (especially on mainnet). Doing some back of the
napkin calculation using logs it appears as if the driver is currently
not cancelling and submitting the respective notification for ~40% of
the `/settle` calls.
There is an argument to be made that the submission strategy should be
refactored more broadly to ensure that cancellations always get
initiated (instead of just stopping to poll the settle future) but this
PR should at least already resolve the current issue.
# Changes
Instead of using the RPC's `mempool` API we simply store the last
successfully submitted transactions in memory. Now that we only have to
lookup a key in a `Dashmap` the latency will be as it was before.
* Optimize live orders queries based on confirmed_valid_to column (#4055)
# Description
Second part of https://github.com/cowprotocol/services/pull/4047 which
introduced optimized queries based on the introduced confirmed_valid_to
column
It is **crucial** for the database to be already migrated manually as
described in previous PR before applying this one.
# Changes
- [x] Adapt user_orders_with_quote query to use new column
- [x] Adapt solvable_orders query to use new column
## How to test
Tested on a test-db created by @MartinquaXD which contains a snapshot of
prod data. The optimized queries run significantly faster due to changes
in `orders` table and new indices.
## Related Issues
https://github.com/cowprotocol/services/pull/4021
---------
Co-authored-by: ilya
Co-authored-by: José Duarte
Co-authored-by: Claude
Co-authored-by: Martin Magnus
* [TRIVIAL] Remove atty and move maplit to dev-dependencies (#4089)
# Description
While migrating the orderbook to axum I did another pass over the
dependencies and found that atty not only is deprecated, it has a
RUSTSEC because its unmaintained and a proper replacement since Rust
1.70
# Changes
- [ ] Replace deprecated atty crate with std::io::IsTerminal
(https://github.com/softprops/atty/blob/master/README.md?plain=1#L3-L7)
- [ ] Move maplit to dev-dependencies
## How to test
Compilation
---------
Co-authored-by: Claude
* Remove useless logs (#4084)
# Description
Our services are extremely chatty which is annoying for debugging and
overwhelms our logging infra. This PR removes or strips down logs that
should not be needed.
# Changes
- removes huge structs like calldata, access lists, and duplicated
transactions - calldata is still preserved where it matters most (when
resimulating quotes, or in revert errors)
- removes tempo items that needlessly get printed in every log of the
respective trace (where it seemed useful I added 1 log that contained
the data)
- removes logs when solutions could not be merged (this is an optimistic
optimization and solutions are not expected to always be mergeable)
- downgraded some logs from `debug` to `trace` (the ones I think I never
used for any debugging but on the surface level seemed like they might
be useful eventually)
- 404 errors from `/notify` requests
* Fetch inflight orders from DB (#4087)
# Description
In order to avoid solver solutions conflicting with each other once a
solution for an order was proposed it will get removed from the auction
until its submission deadline has been reached. So far this was managed
entirely in-memory which can lead to issues whenever the autopilot gets
restarted.
# Changes
Since the DB scheme refactor a while ago we now have all the data we
need to recover inflight orders from the DB. This PR replaces the
in-memory inflight order handling by looking them up from the DB.
To make the query fast enough I added an index on the deadline column on
the `competition_auctions` table. With that the query takes ~0.1ms to
look up 10 auctions worth of inflight orders.
execution plan
```
"Unique (cost=1352.80..1352.98 rows=35 width=57) (actual time=0.041..0.043 rows=1 loops=1)"
" -> Sort (cost=1352.80..1352.89 rows=35 width=57) (actual time=0.040..0.041 rows=1 loops=1)"
" Sort Key: pte.order_uid"
" Sort Method: quicksort Memory: 25kB"
" -> Nested Loop (cost=1.86..1351.90 rows=35 width=57) (actual time=0.028..0.033 rows=1 loops=1)"
" -> Nested Loop Anti Join (cost=1.29..1339.25 rows=4 width=24) (actual time=0.023..0.028 rows=1 loops=1)"
" Join Filter: (s.solution_uid = ps.uid)"
" -> Nested Loop (cost=0.86..1171.92 rows=4 width=24) (actual time=0.013..0.020 rows=2 loops=1)"
" -> Index Scan using competition_auction_deadline on competition_auctions ca (cost=0.43..11.96 rows=5 width=8) (actual time=0.005..0.006 rows=2 loops=1)"
" Index Cond: (deadline > 24300390)"
" -> Index Scan using proposed_solutions_pkey on proposed_solutions ps (cost=0.43..231.80 rows=19 width=16) (actual time=0.003..0.006 rows=1 loops=2)"
" Index Cond: (auction_id = ca.id)"
" Filter: is_winner"
" Rows Removed by Filter: 8"
" -> Index Scan using settlements_auction_id on settlements s (cost=0.43..41.69 rows=11 width=16) (actual time=0.003..0.003 rows=0 loops=2)"
" Index Cond: (auction_id = ca.id)"
" -> Index Only Scan using proposed_trade_executions_pkey on proposed_trade_executions pte (cost=0.56..3.15 rows=1 width=73) (actual time=0.004..0.004 rows=1 loops=1)"
" Index Cond: ((auction_id = ps.auction_id) AND (solution_uid = ps.uid))"
" Heap Fetches: 1"
"Planning Time: 0.543 ms"
"Execution Time: 0.079 ms"
```
## How to test
added a new unit test for the DB query
* Stop enforcing body size limit (#4092)
# Description
The shadow competition broke because the driver is now rejecting
`/solve` requests that are too large due to this new
[code](https://github.com/cowprotocol/services/pull/4082/changes#diff-b997d6f696c5591860aef8658bb56d2a03fc4fa6b37b5e0432ce8e5e4e356aa9R61-R64).
This was surprising to me because that code was added specifically
because the new handler is bypassing the original content length
limiting layer so I would have expected huge requests to already cause
issues.
During the investigation I confirmed using the `/solve` requests stored
on S3 that recent auctions are indeed larger than. 10MB. Afterwards I
spun up a driver locally and sent that solve request to the original
code to confirm that it's indeed not throwing any errors.
I further investigated and concluded that the issue is how we build the
driver's http router. The size limiting layer is the first thing that
gets added to the router but it should actually be the last. This caused
the size limit to never go into effect.
# Changes
To resolve the issue quickly and remove this breaking change ASAP I
simply removed the new size limiting logic from the `/solve` request.
In a follow up PR I'll make the size limit configurable and fix the
router.
## How to test
manual test
* Revert "Optimize live orders queries based on confirmed_valid_to colu… (#4094)
# Description
This reverts commit 7081b03f66c5154cc84ae93f79542425803b4639. (PR
https://github.com/cowprotocol/services/pull/4055)
The migrations will be revisited as they could not be applied to prod
due to lockup and long duration.
* Add no-op placeholder migrations for the numbering to be continuous (#4096)
# Description
We needed to revert migrations V098, V099, and V097 was spelled wrongly
(lowercase v). Since then V100 has been added and it makes flyway
complain about missing interim migrations.
Adding no-op migrations is enough to keep the continuity.
# Changes
Adds no-op migrations V097, V098 and V099
* Rewrite migration V100 to be optional (#4098)
# Description
The migration V100 creates index on competition_auction_deadline on
competition_auctions. To make the prod deployment viable it needs to be
optional (IF NOT EXISTS) which will enable to apply it manually
beforehand.
# Changes
Update the V100 migration to specify IF NOT EXISTS.
## How to test
Will apply the migration manually and deploy on staging to verify.
* Move order outside market log to callsites (#4090)
# Description
The log inside the unwrap does not provide an actionable info, the lack
or order ID, from address, quote ID, make it extremely hard to follow up
on.
More context in
https://cowservices.slack.com/archives/C0375NV72SC/p1769440848303459
# Changes
- [ ] Remove the log from the unwrap
- [ ] Place it in the (seemingly) more relevant callsites
## How to test
NA
* Add configurable database connection pool size (#4097)
# Description
We had an incident where latency increase due to queries waiting for
available connections. This PR provides a configuration for that.
Adds `--db-max-connections` (env: DB_MAX_CONNECTIONS) flag to configure
the maximum database pool size. Default is 10.
# Changes
- [ ] New config for DB connection pool size
- [ ] Add it to autopilot, orderbook, refunder
## How to test
E2E + staging (?)
---------
Co-authored-by: Claude
* Fix migrations introducing indexes on true_valid_to (#4095)
# Description
Reinstates https://github.com/cowprotocol/services/pull/4055 with
improved migrations that should successfully apply
to prod.
The previous migrations tended to lock-up indefinitely on prod database
when running UPDATE on all rows in the `orders` table to ensure
`true_valid_to` is not null. This was done as an additional safety layer
as these rows have been manually backfilled previously, so it is no
longer needed and turned out to be problematic.
Additionally, the index creation can take more time than is allowed for
release deployment which causes them to be aborted. It is easier to
create them manually and have the migration CREATE INDEX IF NOT EXISTS.
# Changes
- Had to move migrations from 098, 099 to 101, 102 as there was a
migration 100 merged in the meantime.
- Moves migration 098 to 101.
Removes conservative backfill of empty `true_valid_to` which caused a
lock-up on the prod database.
- Moves migration 099 to 102
Makes index creation optional (CREATE INDEX IF NOT EXISTS) as they will
be created manually, to ensure smooth deployment.
---------
Co-authored-by: ilya
Co-authored-by: José Duarte
Co-authored-by: Claude
Co-authored-by: Martin Magnus
* Migrate gas estimation to match alloy's type (#4054)
> [!CAUTION]
> Review with care! The changes are non trivial and there is one
breaking change, the gas price returned by the driver no longer includes
the base fee!
# Description
Refactors gas price handling to use integer arithmetic and alloy's
native types instead of floating-point
calculations. This eliminates precision loss in gas price calculations
and better aligns with alloy's conventions.
The removal of the base fee is not a true removal, before this change,
the base fee was either 0 or the max value available, both leading to
inaccurate results. The new code removes the base fee from the type that
was being used to describe the estimations (because the base_fee isn't
an estimate, it comes in the previous block); but starts querying the
chain for the latest block so it's able to get the proper base_fee (if
available). The gas estimates themselves should suffer a big change
(since the estimate code is the same) but the effective gas price should
become more accurate due to the inclusion of the base fee in the
calculations.
# Changes
- Replace custom GasPrice1559 with alloy's Eip1559Estimation throughout
codebase
- Change GasPrice::base from FeePerGas to Option to match alloy's
base fee representation
- Migrate gas calculations from f64 to u128/U256 integer arithmetic
- Implement calc_effective_gas_price from alloy for effective gas price
calculations
- Add base_fee: Option to BlockInfo for proper EIP-1559 support
- Update API responses to return u128 directly instead of wrapped U256
- Add scaling helper methods (scaled_by_pct, scaled_by_pml) for clearer
gas price adjustments
# How to test
> [!NOTE]
> Tested on staging, starting at Mon, 19 Jan 2026 12:10:18 +0000.
> Performed a successful trade:
https://staging.explorer.cow.fi/lens/orders/0x06677572a2715cc28241a34f5d669247fba167c8d9adc3fcd338e40a3c52ea4109fbad1ea29c36dfe4f8f7baa87c5edf85e0d9f3696e28f5
1. Run existing test suite: cargo test
2. Verify gas price estimation endpoints return expected values
3. Test refunder gas price calculations with various scenarios (new tx,
replacement tx, max gas price limits)
4. Verify settlement submissions use correct gas parameters
---------
Co-authored-by: Claude
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* [TRIVIAL] Add Plasma to OpenApi (#4100)
Adds Plasma URLs to the orderbook's OpenAPI.
* Optimize order queries by using true_valid_to (#4104)
# Description
Reinstates queries from
https://github.com/cowprotocol/services/pull/4055 to accelerate live
order queries based
on the newly introduced `true_valid_to` column and its indexes.
Tested on a test-db created by @MartinquaXD which contains a snapshot of
prod data. The optimized queries run significantly faster due to changes
in `orders` table and new indices.
# Changes
- [x] Adapt user_orders_with_quote query to use new column
- [x] Adapt solvable_orders query to use new column
## How to test
Tested on the test database created by @MartinquaXD by analyzing query
plan (`EXPLAIN (ANALYZE, BUFFERS)`). In the worst case, the latency has
improved 40x (from 20s to 0.5s).
* Fix haircut logic (#4093)
# Description
The haircut feature had a critical bug where the driver-reported
`sell_amount` would exceed the user's signed one. For example:
- User signed: sell_amount = 5 ETH
- Solver proposed a solution with the same sell amount
- Driver reported: sellAmount = 5.25 ETH (with 5% haircut added)
- The settlement executed onchain, but autopilot couldn't make sense of
it due to the unexpected sell amount
- The circuit breaker also detects this and bans the solver
# Changes
1. Removed haircut from `sell_amount()` - Now returns only executed +
fee, which is the actual amount that left the user's wallet
2. Added `haircut_in_sell_token()` helper - Computes haircut amount
converted to sell token
3. Updated `custom_prices()` - Applies haircut only for quotes/scoring
purposes, making bids more conservative without affecting reported
amounts
4. Added `Jit::custom_prices()` - JIT orders don't have a haircut (for
now), so they use simple sell/buy amount derivation
## How to test
Adjusted existing and added new tests that fail on the `main` branch,
but work with the fix.
* [TRIVIAL] Drop the db solver participation guard (#4099)
# Description
Cleans up the codebase by removing the DB solver participation guard.
It's been used in a log-only mode for a while. Given the lack of demand
for this functionality, it doesn't make sense to keep it. Also, even if
it were decided to enable it, the logic would need to be reworked to
cover some edge cases, which would take some time to implement.
* [TRIVIAL] Fix playground configs (#4108)
# Description
Estimators were expecting different strings and the tx gas was missing
from the driver
# Changes
- [ ] Remove Native from gas estimators
- [ ] Add "Driver" to the native price estimators
- [ ] Add tx-gas-limit to the driver config
## How to test
Run docker compose and check if autopilot, orderbook and driver are up
Co-authored-by: Claude
* Update playground frontend Dockerfile (#4103)
# Description
Fixes Docker pnpm version error.
# Changes
Enable and prepare corepack version before running pnpm install.
# Fixes
https://github.com/cowprotocol/services/issues/4101
* Normalize ECDSA signature `v` parameter for Solidity `ecrecover` compatibility (#4107)
# Description
This PR fixes an issue where EIP-712 signatures with `v = 0` or `1`
(modern EIP-2 format) pass off-chain validation but fail on-chain
settlement with `GPv2: invalid signature`.
# Problem
Some wallets (e.g., Bitget Wallet) produce ECDSA signatures using the
modern EIP-2 format, where `v ∈ {0, 1}`, while Solidity's `ecrecover`
precompile expects the legacy format where `v ∈ {27, 28}`.
Off-chain (Alloy library): The
https://github.com/alloy-rs/core/blob/main/crates/primitives/src/signature/sig.rs
internally normalizes `v` to a boolean parity before recovery, so
signatures with `v = 0` or `1` recover correctly.
On-chain (Solidity): The `ecrecover` precompile
https://coders-errand.com/ecrecover-signature-verification-ethereum/.
When given `v = 0`, it returns `address(0)`, which triggers the
https://github.com/cowprotocol/contracts/blob/main/src/contracts/mixins/GPv2Signing.sol#L207-L208:
```
signer = ecrecover(message, v, r, s);
require(signer != address(0), "GPv2: invalid ecdsa signature");
```
This mismatch causes orders to pass orderbook validation but fail at
settlement.
# Solution
Normalize `v` to the legacy format (`27/28`) at signature parsing time
in `EcdsaSignature::from_bytes()`:
```
let normalized_v = match v {
0 | 27 => 27,
1 | 28 => 28,
_ => anyhow::bail!("invalid signature v value: {v}, expected 0, 1, 27, or 28"),
};
```
This ensures:
1. Signatures are stored with normalized `v` values
2. Both off-chain validation and on-chain `ecrecover` receive compatible
parameters
3. The fix applies to all entry points (`Signature::from_bytes`, JSON
deserialization)
# Reproducing the Issue
The issue can be verified using a real failed order and Foundry's cast
tool to call the `ecrecover` precompile directly:
Failed order:
- Order UID:
`0xb8e19962dd762067afb9f169684abfcbf2cb13bdc7a62ae2e680ebd5ce18c9bcca0c9c4a650cc4ed406d4a6dd031cdd9d4ebf0dc697a0686`
- Order hash (struct hash):
`0xb8e19962dd762067afb9f169684abfcbf2cb13bdc7a62ae2e680ebd5ce18c9bc`
- Expected signer (owner): `0xca0c9c4a650cc4ed406d4a6dd031cdd9d4ebf0dc`
- Signature:
`0xAB2E74AA0D67233ADC7B52C3B832357ED35F2052338D820D4DA66210EFA7A9684601726CB76BD26DDD958EFE291CFB57E02C39B3F60FBB8BBED1E891FB14CB5D00`
- r:
`0xAB2E74AA0D67233ADC7B52C3B832357ED35F2052338D820D4DA66210EFA7A968`
- s:
`0x4601726CB76BD26DDD958EFE291CFB57E02C39B3F60FBB8BBED1E891FB14CB5D`
- v: `0x00` ← the problem
## Step 1: Compute the EIP-712 message hash
To avoid computing it manually, I grabbed it from a Tenderly
simulation[[URL](https://dashboard.tenderly.co/cow-protocol/barn/simulator/babc6191-e15a-470c-83e0-5825b8a4501b/debugger?trace=0.0.4.1.1.0)].
```
MESSAGE_HASH="0xb8e19962dd762067afb9f169684abfcbf2cb13bdc7a62ae2e680ebd5ce18c9bc"
```
## Step 2: Test ecrecover with `v=0` (returns zero address - FAILS
on-chain)
```
cast call 0x0000000000000000000000000000000000000001 \
"${MESSAGE_HASH}0000000000000000000000000000000000000000000000000000000000000000AB2E74AA0D67233ADC7B52C3B832357ED35F2052338D820D4DA66210EFA7A9684601726CB76BD26DDD958EFE291CFB57E02C39B3F60FBB8BBED1E891FB14CB5D" \
--rpc-url https://eth.llamarpc.com
```
### Returns:
`0x0000000000000000000000000000000000000000000000000000000000000000`
## Step 3: Test ecrecover with `v=27` (returns correct signer - WORKS)
```
cast call 0x0000000000000000000000000000000000000001 \
"${MESSAGE_HASH}000000000000000000000000000000000000000000000000000000000000001bAB2E74AA0D67233ADC7B52C3B832357ED35F2052338D820D4DA66210EFA7A9684601726CB76BD26DDD958EFE291CFB57E02C39B3F60FBB8BBED1E891FB14CB5D" \
--rpc-url https://eth.llamarpc.com
```
### Returns:
`0x000000000000000000000000ca0c9c4a650cc4ed406d4a6dd031cdd9d4ebf0dc` ✅
* Fix haircut mismatch between reported and on-chain amounts (#4109)
# Description
Fixes the mismatch between driver-reported amounts and on-chain executed
amounts when the haircut is configured. Previously, the driver reported
higher buy amounts than users actually received on-chain (for sell
orders), resulting in a discrepancy that matched the configured haircut.
Root cause: `sell_amount()` and `buy_amount()` did NOT include haircut,
but `custom_prices()` (used for on-chain encoding) DID. This caused
reported amounts to differ from on-chain execution.
# Changes
Include haircut effects in `sell_amount()` and `buy_amount()` so that:
- Reported amounts include haircut
- On-chain execution matches reported amounts
- Autopilot scores based on actual (haircutted) amounts
For sell orders:
- `sell_amount()` → unchanged (user sells exactly what they signed)
- `buy_amount()` → reduced by haircut (user receives less)
For buy orders:
- `sell_amount()` → increased by haircut (user pays more)
- `buy_amount()` → unchanged (user receives exactly what they signed
for)
## How to test
Adjusted existing tests.
---------
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Support fractional vol fee bips in orderbook (#4112)
# Description
We were rounding fractional bips (e.g. `0.3`) to zero. This PR increases
the scale so we can handle basis point values lower than 0. At this
moment we have volume fee overrides for correlated assets sets to 0.3
and it works fine in autopilot, but /quote endpoint rounds to zero
instead, so this fix is needed.
## How to test
Unit tests & I tested by deploying this branch to staging.
---------
Co-authored-by: ilya
* Improve autopilot maintenance (#4113)
# Description
While looking into the degraded time to happy moo SLI it became apparent
that ethflow orders have a significantly worse SLI compared to "regular"
orders.
Ethflow orders are not harder to solve for than any other orders but
they are special in the way they enter the system. Instead of having a
REST API call that puts those orders into the DB they get placed by
calling the ethflow contract onchain. The autopilot then indexes those
events and puts them into the DB.
Since the autopilot run loop is synced to the block chain (start a new
auction right after seeing a new block) ethflow orders are comparable to
regular orders that ALWAYS get placed at the worst possible time
(immediately before cutting the auction).
Due to being overwhelmed with indexing ethflow orders because of a trade
inventive we moved ethflow indexing off of the critical path (see
[here](https://github.com/cowprotocol/services/pull/3849)) but that also
had the consequence of more ethflow orders not making it into the first
possible auction which immediately delays them at least by 12s.
# Changes
This PR puts ethflow order indexing back on the critical path while
still avoiding the issue that caused us to move it off the critical path
in the first place.
Instead of having a system where the autopilot triggers the maintenance
to happen before a new auction or after new block appearing (when
waiting for submitted solutions) with an additional background task that
checks every second for new ethflow orders that need indexing.
This PR moves autopilot maintenance (i.e. block indexing) completely
into a background task which triggers ASAP when the system sees a new
block. In order to build the auction only after the blocks have been
indexed this background tasks feeds a channel of processed blocks. The
autopilot then only has to wait for this channel to yield a block with a
high enough block number.
So the properties of the new solutions are:
* event indexing has as little delay as possible
* indexing runs concurrently so it's as fast as possible (without
speeding up the individual code paths)
* autopilot can wait for data from a given block to be processed fully
* autopilot stops waiting after a configurable amount of time to keep
running auctions even if indexing is slow for whatever reason
## How to test
Covered by existing e2e tests
* Remove ethcontract+web3+primitive-types (#4106)
Completes the Alloy migration by removing the last remaining legacy
Ethereum libraries: `ethcontract`, `web3`, and `primitive-types`. These
dependencies are no longer needed and can be fully removed, simplifying
the dependency tree.
**Key change**: The labelling layer for observability now operates at
the `Web3` wrapper level instead of directly on `DynProvider`, ensuring
the wallet state is properly preserved when creating labeled provider
instances.
# Changes
- [x] Remove `ethcontract`, `web3`, and `primitive-types` from workspace
dependencies
- [x] Delete unused legacy ethrpc implementations (`buffered.rs`,
`http.rs`, `instrumented.rs`, `alloy/conversions.rs`)
- [x] Migrate `ProviderLabelingExt` from `DynProvider` to `Web3`
wrapper, preserving wallet state across labeled instances
- [x] Clean up ethrpc module structure and simplify exports
- [x] Update imports across affected crates to use Alloy types only
- [x] Remove legacy references from contract vendoring script and test
setup
## How to test
Existing tests
* Trait‑Based Architecture for Refunder Service (#4051)
### Description
This PR follows up on #4029 and introduces a **trait‑based
architecture** for the `refunder` crate. By decoupling the
`RefundService` from concrete database and blockchain implementations,
we can now write unit tests without relying on (heavyweight) integration
tests.
### Changes
- Added a new `traits.rs` module that defines `DbRead`, `ChainRead`, and
`ChainWrite` traits to abstract the two main boundaries of the system.
- Created an `infra/` module housing the previous concrete
implementations of those traits:
- `AlloyChain` implements `ChainRead`
- `Postgres` implements `DbRead`
- Made `RefundService` generic over those traits, so we can use mocks
for unit testing it (and thes real/production implementations) as
needed.
- Extracted `identify_uids_refunding_status` into its own function, to
simplify testing.
- Moved the `RefundStatus` enum into `traits.rs` so it lives alongside
the related abstractions.
- Reorganized the service construction inside `run()` for clearer flow.
- Added a suite of unit tests that use mocks to cover a variety of
scenarios.
### How to test
Run the unit tests with:
```bash
cargo nextest run -p refunder
```
* Fix tini zombie reaping with shared process namespace (#4114)
## Summary
Adds the `-s` (subreaper) flag to tini in the Dockerfile entrypoint to
fix zombie process reaping when `shareProcessNamespace: true` is set in
Kubernetes deployments.
## Problem
Our Kubernetes deployments use `shareProcessNamespace: true` to allow
sidecar containers (like the memory monitor) to access `/proc` of the
main process. However, this causes the following warning:
```
[WARN tini (82)] Tini is not running as PID 1 and isn't registered as a child subreaper.
Zombie processes will not be re-parented to Tini, so zombie reaping won't work.
To fix the problem, use the -s option or set the environment variable TINI_SUBREAPER to register Tini as a child subreaper, or run Tini as PID 1.
```
When `shareProcessNamespace` is enabled, Kubernetes' pause container
becomes PID 1 instead of tini:
```
PID 1: pause (Kubernetes infrastructure)
├── tini -- autopilot
│ └── autopilot
└── /bin/sh -c (memory-monitor sidecar)
```
Without PID 1 status, tini cannot reap zombie (orphaned) child processes
by default.
## Solution
The `-s` flag tells tini to register as a **child subreaper** via the
`PR_SET_CHILD_SUBREAPER` prctl. This Linux kernel feature allows a
non-PID-1 process to adopt and reap orphaned descendant processes,
restoring proper zombie cleanup.
* [TRIVIAL] Fix vulnerability by bumping bytes crate version (#4121)
# Description
The `cargo audit` action complained about the `bytes` crate being
vulnerable. The recommended fix is to upgrade `bytes` to version
`1.11.1` (patch version bump).
## How to test
`cargo audit` action
* [TRIVIAL] Fix verbose log (#4120)
# Description
There was a slight oversight in
https://github.com/cowprotocol/services/pull/4084. Instead of printing
only the solver name we now print all the internals which is quite a
lot.
# Changes
* only log the solver name again
* stop logging the weth address as well
* [TRIVIAL] Remove unused error (#4124)
# Description
Removes an unused error, this could actually have made it in #4106 but
VSCode looked like an Xmas tree, I wasn't expecting this to be this
simple.
# Changes
- [ ] Removes unused error
- [ ] Removes accompanying From
* [TRIVIAL] Rename Web3's DynProvider alloy -> provider (#4123)
# Description
Renames alloy to provider. Done in a separate PR from the removal due to
the number of changes
# Changes
- [ ] `alloy` -> `provider`
* Log tracing spans in JSON logger (#4117)
# Description
In order to reduce load on the logging infra we want to switch to
structured logging (JSON). However, when we tested the current setup we
realized that the `request_id` (among other things) was not logged which
made debugging things basically impossible.
# Changes
Adjusted the custom JSON formatter to iterate over parent spans and
serialize their names and associated fields.
Conceptually the current logic is slightly awkward as the field
formatter formats the fields to JSON and later when we format the whole
log line we re-parse the formatted string to JSON and the serialize it
again. But unless this is actually causing issues when it's deployed
I'll not address in order to unblock structured logging ASAP.
## How to test
Manual tests (spans are at the end)
original version:
```
{
"timestamp":"2026-02-03T09:51:18.773085+00:00",
"level":"INFO",
"fields":{
"message":"- \"GET /api/v1/token/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48/native_price HTTP/1.1\" 404 \"-\" \"curl/8.7.1\" 5.229292ms",
"log.target":"orderbook::api::request_summary",
"log.module_path":"warp::filters::log",
"log.file":"/Users/martin/.cargo/git/checkouts/warp-ee983b87d3028bb6/586244e/src/filters/log.rs",
"log.line":37
},
"target":"log",
"trace_id":"4aaa6c6e6e56f103d5cf975005c15d85"
```
default JSON logger:
```
{
"timestamp":"2026-02-03T09:40:00.265994Z",
"level":"INFO",
"fields":{
"message":"- \"GET /api/v1/token/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48/native_price HTTP/1.1\" 404 \"-\" \"curl/8.7.1\" 2.721875ms",
"log.target":"orderbook::api::request_summary",
"log.module_path":"warp::filters::log",
"log.file":"/Users/martin/.cargo/git/checkouts/warp-ee983b87d3028bb6/586244e/src/filters/log.rs",
"log.line":37
},
"target":"orderbook::api::request_summary",
"span":{
"request_id":"6",
"name":"http_request"
},
"spans":[
{
"request_id":"6",
"name":"http_request"
}
]
}
```
new version:
```
{
"timestamp":"2026-02-03T09:41:25.529338+00:00",
"level":"INFO",
"fields":{
"message":"- \"GET /api/v1/token/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48/native_price HTTP/1.1\" 404 \"-\" \"curl/8.7.1\" 6.522583ms",
"log.target":"orderbook::api::request_summary",
"log.module_path":"warp::filters::log",
"log.file":"/Users/martin/.cargo/git/checkouts/warp-ee983b87d3028bb6/586244e/src/filters/log.rs",
"log.line":37
},
"target":"log",
"trace_id":"cd6bf89be55582b19fd046b7c111f2b1",
"spans":{
"http_request":{
"request_id":"0"
}
}
}
```
* Initial Claude setup (#4122)
# Description
Add instructions for Claude to work more efficiently.
Expect .env.claude with secrets filled in. Contact me.
None of this was written by hand. To put together the order debugging
document I took transcripts of both Felix's talks on the topic and our
internal docs and threw it at Claude. Then I tried it for an order and
made some edits.
# Changes
- [x] Sets up MCP servers for main DB and analytics DB
- [x] Sets up MPC for fetch
- [x] Add CLAUDE.md instructing Claude about the project and coding
practices (formatting, style, etc.)
- [x] Adds a document telling Claude how to debug orders so it knows
what to do next time you ask him "y order {uid} not filled"
- [x] Added a comman so you can run `/debug-order
0xd997dc715a7610c75e5f97548685befacb7ea5ad878cb4bac1816903514ed84d1dffc418c0d83bd8b98ab3d2e07b83bf5439f4236981a392`
within Claude Code
## How to test
Ask Claude Coe to do stuff for you.
* Don't notify solvers about failed solutions with a haircut fee (#4115)
# Description
This PR addresses [a
comment](https://github.com/cowprotocol/services/pull/4049#pullrequestreview-3687251046)
that suggests avoiding notifying solvers on failed solutions encoding
that were configured with a haircut fee. Also, updates the metric to
easily identify the error rate of solutions with the haircut fee to
configure a new alert to take any action.
* Optimize total_surplus query (#4116)
# Description
We've been experiencing latency spikes on several endpoints, we've
pinned this down to the time it takes to acquire DB connections from the
pool; when checking RDS monitoring, the surplus query always shows up at
the top.
The current theory is that the query is a bit slower than it could be,
as more users request the main swap page, their surplus is loaded (even
if they don't request it — i.e. load the wallet modal) and if some of
these users have a larger amount of orders, they're taking up
connections that other endpoints aren't getting.
I looked into the user distribution, here are the results:
|log_bucket|bucket_start|num_users|pct|cumulative_users|cumulative_pct|
|----------|------------|---------|---|----------------|--------------|
|0|1|295329|83.86|295329|83.86|
|1|10|51334|14.58|346663|98.44|
|2|100|5071|1.44|351734|99.88|
|3|1000|306|0.09|352040|99.96|
|4|10000|106|0.03|352146|99.99|
|5|100000|28|0.01|352174|100.00|
Distribution Query
```sql
WITH buckets AS (
SELECT
floor(log(order_count))::int as log_bucket,
power(10, floor(log(order_count)))::int as bucket_start,
count(*) as num_users
FROM (
SELECT owner, count(*) as order_count
FROM orders
GROUP BY owner
) sub
GROUP BY 1, 2
)
SELECT
log_bucket,
bucket_start,
num_users,
round(100.0 * num_users / sum(num_users) over(), 2) as pct,
sum(num_users) over(order by log_bucket) as cumulative_users,
round(100.0 * sum(num_users) over(order by log_bucket) / sum(num_users) over(), 2) as cumulative_pct
FROM buckets
ORDER BY log_bucket;
```
However, if it was just this, it would be too simple. Depending on the
user, they might have no orders and only onchain orders (note that the
max number of onchain orders is around ~10k), some will have skewed data
distributions across tables too, leading to analyzing and optimizing
this query a bit tricky.
There are two crucial changes to the query — removing ARRAY_AGG and
adding indexes — the first makes it so that the DB does not have to
materialize a potentially big array in memory, which would otherwise
lead to bad estimations too; the second provides better "access paths"
to some of the information the query requires.
### RDS Stats (1h)
Before
After
# Changes
- [ ] Replace the query with the optimized one
- [ ] Create indexes (already done to avoid issues during migration)
## Query Plans
Before
```
Aggregate (cost=1033006.55..1033006.56 rows=1 width=8) (actual time=130139.025..130143.456 rows=1 loops=1)
-> Append (cost=1032650.26..1033006.51 rows=2 width=100) (actual time=31175.499..130090.776 rows=10998 loops=1)
-> Subquery Scan on "*SELECT* 1" (cost=1032650.26..1032856.24 rows=1 width=100) (actual time=31175.498..130085.109 rows=10998 loops=1)
-> Nested Loop (cost=1032650.26..1032856.23 rows=1 width=100) (actual time=31175.497..130079.454 rows=10998 loops=1)
Join Filter: (t.order_uid = o.uid)
InitPlan 3 (returns $5)
-> Finalize Aggregate (cost=1032601.57..1032601.58 rows=1 width=32) (actual time=30761.210..30765.632 rows=1 loops=1)
-> Gather (cost=1032601.35..1032601.56 rows=2 width=32) (actual time=30678.267..30689.666 rows=3 loops=1)
Workers Planned: 2
Workers Launched: 2
-> Partial Aggregate (cost=1031601.35..1031601.36 rows=1 width=32) (actual time=30675.862..30675.863 rows=1 loops=3)
-> Parallel Bitmap Heap Scan on orders (cost=24591.99..1030861.56 rows=295913 width=57) (actual time=278.099..30619.932 rows=226281 loops=3)
Recheck Cond: (owner = '\x10dad59905d93ca37cd25a35f25349cb5956ba8e'::bytea)
Rows Removed by Index Recheck: 737927
Heap Blocks: exact=15162 lossy=55571
-> Bitmap Index Scan on order_owner (cost=0.00..24414.44 rows=710192 width=0) (actual time=271.994..271.994 rows=749143 loops=1)
Index Cond: (owner = '\x10dad59905d93ca37cd25a35f25349cb5956ba8e'::bytea)
InitPlan 4 (returns $6)
-> Aggregate (cost=47.00..47.01 rows=1 width=32) (actual time=0.021..0.022 rows=1 loops=1)
-> Bitmap Heap Scan on onchain_placed_orders (cost=4.09..46.97 rows=11 width=57) (actual time=0.017..0.018 rows=0 loops=1)
Recheck Cond: (sender = '\x10dad59905d93ca37cd25a35f25349cb5956ba8e'::bytea)
-> Bitmap Index Scan on order_sender (cost=0.00..4.08 rows=11 width=0) (actual time=0.013..0.013 rows=0 loops=1)
Index Cond: (sender = '\x10dad59905d93ca37cd25a35f25349cb5956ba8e'::bytea)
-> Nested Loop (cost=1.12..136.08 rows=2 width=188) (actual time=31172.849..109529.707 rows=10914 loops=1)
-> Index Scan using orders_pkey on orders o (cost=0.56..85.71 rows=10 width=123) (actual time=31172.113..101635.999 rows=678843 loops=1)
Index Cond: (uid = ANY (array_cat($5, $6)))
-> Index Only Scan using order_rewards_pkey on order_execution oe (cost=0.56..5.01 rows=3 width=65) (actual time=0.011..0.011 rows=0 loops=678843)
Index Cond: (order_uid = o.uid)
Heap Fetches: 170
-> Index Scan using trade_order_uid on trades t (cost=0.56..0.74 rows=2 width=81) (actual time=0.416..0.416 rows=1 loops=10914)
Index Cond: (order_uid = oe.order_uid)
SubPlan 1
-> Index Scan using auction_prices_pkey on auction_prices ap (cost=0.58..35.00 rows=16 width=11) (actual time=1.428..1.428 rows=1 loops=9675)
Index Cond: ((auction_id = oe.auction_id) AND (token = o.buy_token))
SubPlan 2
-> Index Scan using auction_prices_pkey on auction_prices ap_1 (cost=0.58..35.00 rows=16 width=11) (actual time=1.596..1.596 rows=1 loops=1323)
Index Cond: ((auction_id = oe.auction_id) AND (token = o.sell_token))
-> Subquery Scan on "*SELECT* 2" (cost=2.09..150.26 rows=1 width=100) (actual time=0.010..0.013 rows=0 loops=1)
-> Nested Loop (cost=2.09..150.25 rows=1 width=100) (actual time=0.009..0.012 rows=0 loops=1)
Join Filter: (j.uid = t_1.order_uid)
-> Nested Loop (cost=1.54..79.45 rows=1 width=192) (actual time=0.009..0.010 rows=0 loops=1)
-> Nested Loop Anti Join (cost=0.98..74.32 rows=1 width=127) (actual time=0.009..0.010 rows=0 loops=1)
-> Index Scan using jit_user_order_creation_timestamp on jit_orders j (cost=0.42..33.62 rows=8 width=127) (actual time=0.008..0.009 rows=0 loops=1)
Index Cond: (owner = '\x10dad59905d93ca37cd25a35f25349cb5956ba8e'::bytea)
-> Index Only Scan using orders_pkey on orders o_1 (cost=0.56..5.08 rows=1 width=57) (never executed)
Index Cond: (uid = j.uid)
Heap Fetches: 0
-> Index Only Scan using order_rewards_pkey on order_execution oe_1 (cost=0.56..5.11 rows=3 width=65) (never executed)
Index Cond: (order_uid = j.uid)
Heap Fetches: 0
-> Index Scan using trade_order_uid on trades t_1 (cost=0.56..0.74 rows=2 width=81) (never executed)
Index Cond: (order_uid = oe_1.order_uid)
SubPlan 5
-> Index Scan using auction_prices_pkey on auction_prices ap_2 (cost=0.58..35.00 rows=16 width=11) (never executed)
Index Cond: ((auction_id = oe_1.auction_id) AND (token = j.buy_token))
SubPlan 6
-> Index Scan using auction_prices_pkey on auction_prices ap_3 (cost=0.58..35.00 rows=16 width=11) (never executed)
Index Cond: ((auction_id = oe_1.auction_id) AND (token = j.sell_token))
Planning Time: 4.788 ms
Execution Time: 130157.850 ms
```
After
```
Aggregate (cost=14614.00..14614.01 rows=1 width=8) (actual time=1901.439..1902.539 rows=1 loops=1)
Buffers: shared hit=11838 read=4075
I/O Timings: shared read=2240.469
-> Gather Merge (cost=14557.86..14604.91 rows=404 width=136) (actual time=1900.725..1902.018 rows=917 loops=1)
Workers Planned: 2
Workers Launched: 2
Buffers: shared hit=11838 read=4075
I/O Timings: shared read=2240.469
-> Sort (cost=13557.83..13558.25 rows=168 width=136) (actual time=762.591..762.628 rows=306 loops=3)
Sort Key: "*SELECT* 2".uid
Sort Method: quicksort Memory: 49kB
Buffers: shared hit=11838 read=4075
I/O Timings: shared read=2240.469
Worker 0: Sort Method: quicksort Memory: 115kB
Worker 1: Sort Method: quicksort Memory: 25kB
-> Parallel Append (cost=2.25..13551.63 rows=168 width=136) (actual time=2.247..762.040 rows=306 loops=3)
Buffers: shared hit=11824 read=4075
I/O Timings: shared read=2240.469
-> Subquery Scan on "*SELECT* 2" (cost=24.42..13550.79 rows=53 width=136) (actual time=3.496..1892.483 rows=709 loops=1)
Buffers: shared hit=9702 read=3415
I/O Timings: shared read=1854.511
-> Nested Loop Left Join (cost=24.42..13550.26 rows=53 width=136) (actual time=3.495..1892.175 rows=709 loops=1)
Buffers: shared hit=9702 read=3415
I/O Timings: shared read=1854.511
-> Nested Loop (cost=23.84..13414.32 rows=53 width=155) (actual time=1.455..762.309 rows=709 loops=1)
Buffers: shared hit=8050 read=1521
I/O Timings: shared read=736.402
-> Nested Loop (cost=23.28..12573.83 rows=195 width=245) (actual time=1.418..667.512 rows=709 loops=1)
Buffers: shared hit=5387 read=1337
I/O Timings: shared read=647.346
-> Nested Loop (cost=22.73..9169.44 rows=796 width=180) (actual time=1.397..584.403 rows=711 loops=1)
Buffers: shared hit=2649 read=1211
I/O Timings: shared read=570.801
-> Bitmap Heap Scan on onchain_placed_orders opo (cost=22.17..2343.76 rows=796 width=57) (actual time=0.699..6.255 rows=711 loops=1)
Recheck Cond: (sender = '\x8ef4fb956d0cb06ca9e3db76040f08154e8d0122'::bytea)
Buffers: shared hit=56 read=248
I/O Timings: shared read=2.028
-> Bitmap Index Scan on order_sender (cost=0.00..21.97 rows=796 width=0) (actual time=0.044..0.044 rows=711 loops=1)
Index Cond: (sender = '\x8ef4fb956d0cb06ca9e3db76040f08154e8d0122'::bytea)
Buffers: shared hit=4
-> Index Scan using orders_pkey on orders o (cost=0.56..8.57 rows=1 width=123) (actual time=0.812..0.812 rows=1 loops=711)
Index Cond: (uid = opo.uid)
Filter: (owner <> '\x8ef4fb956d0cb06ca9e3db76040f08154e8d0122'::bytea)
Buffers: shared hit=2593 read=963
I/O Timings: shared read=568.773
-> Index Only Scan using order_rewards_pkey on order_execution oe (cost=0.56..4.25 rows=3 width=65) (actual time=0.115..0.115 rows=1 loops=711)
Index Cond: (order_uid = o.uid)
Heap Fetches: 16
Buffers: shared hit=2738 read=126
I/O Timings: shared read=76.545
-> Index Only Scan using trades_covering on trades t (cost=0.56..4.29 rows=2 width=81) (actual time=0.132..0.133 rows=1 loops=709)
Index Cond: (order_uid = o.uid)
Heap Fetches: 0
Buffers: shared hit=2663 read=184
I/O Timings: shared read=89.056
-> Index Scan using auction_prices_pkey on auction_prices ap (cost=0.58..31.94 rows=16 width=40) (actual time=1.590..1.590 rows=1 loops=709)
Index Cond: ((auction_id = oe.auction_id) AND (token = CASE o.kind WHEN 'sell'::orderkind THEN o.buy_token ELSE o.sell_token END))
Buffers: shared hit=1652 read=1894
I/O Timings: shared read=1118.109
-> Subquery Scan on "*SELECT* 1" (cost=2.25..4428.09 rows=350 width=136) (actual time=3.233..393.256 rows=208 loops=1)
Buffers: shared hit=2119 read=660
I/O Timings: shared read=385.958
-> Nested Loop (cost=2.25..4424.59 rows=350 width=136) (actual time=3.233..393.181 rows=208 loops=1)
Join Filter: (t_1.order_uid = o_1.uid)
Buffers: shared hit=2119 read=660
I/O Timings: shared read=385.958
-> Nested Loop Left Join (cost=1.70..3742.63 rows=156 width=149) (actual time=3.212..369.737 rows=208 loops=1)
Buffers: shared hit=1320 read=618
I/O Timings: shared read=364.992
-> Nested Loop (cost=1.12..3316.62 rows=156 width=188) (actual time=1.266..28.471 rows=208 loops=1)
Buffers: shared hit=849 read=49
I/O Timings: shared read=26.775
-> Index Only Scan using orders_owner_covering on orders o_1 (cost=0.56..187.36 rows=638 width=123) (actual time=1.247..2.194 rows=210 loops=1)
Index Cond: (owner = '\x8ef4fb956d0cb06ca9e3db76040f08154e8d0122'::bytea)
Heap Fetches: 1
Buffers: shared hit=24 read=7
I/O Timings: shared read=2.038
-> Index Only Scan using order_rewards_pkey on order_execution oe_1 (cost=0.56..4.87 rows=3 width=65) (actual time=0.124..0.124 rows=1 loops=210)
Index Cond: (order_uid = o_1.uid)
Heap Fetches: 4
Buffers: shared hit=825 read=42
I/O Timings: shared read=24.736
-> Index Scan using auction_prices_pkey on auction_prices ap_1 (cost=0.58..34.99 rows=16 width=40) (actual time=1.639..1.639 rows=1 loops=208)
Index Cond: ((auction_id = oe_1.auction_id) AND (token = CASE o_1.kind WHEN 'sell'::orderkind THEN o_1.buy_token ELSE o_1.sell_token END))
Buffers: shared hit=471 read=569
I/O Timings: shared read=338.217
-> Index Only Scan using trades_covering on trades t_1 (cost=0.56..4.29 rows=2 width=81) (actual time=0.109..0.109 rows=1 loops=208)
Index Cond: (order_uid = oe_1.order_uid)
Heap Fetches: 0
Buffers: shared hit=799 read=42
I/O Timings: shared read=20.966
-> Subquery Scan on "*SELECT* 3" (cost=2.67..94.60 rows=1 width=136) (actual time=0.012..0.014 rows=0 loops=1)
Buffers: shared hit=3
-> Nested Loop Left Join (cost=2.67..94.59 rows=1 width=136) (actual time=0.011..0.013 rows=0 loops=1)
Buffers: shared hit=3
-> Nested Loop (cost=2.09..91.83 rows=1 width=159) (actual time=0.011..0.013 rows=0 loops=1)
Buffers: shared hit=3
-> Nested Loop (cost=1.54..87.55 rows=1 width=208) (actual time=0.011..0.012 rows=0 loops=1)
Buffers: shared hit=3
-> Nested Loop Anti Join (cost=0.98..82.50 rows=1 width=127) (actual time=0.011..0.011 rows=0 loops=1)
Buffers: shared hit=3
-> Index Scan using jit_user_order_creation_timestamp on jit_orders j (cost=0.42..37.21 rows=9 width=127) (actual time=0.010..0.010 rows=0 loops=1)
Index Cond: (owner = '\x8ef4fb956d0cb06ca9e3db76040f08154e8d0122'::bytea)
Buffers: shared hit=3
-> Index Only Scan using orders_pkey on orders o_2 (cost=0.56..5.02 rows=1 width=57) (never executed)
Index Cond: (uid = j.uid)
Heap Fetches: 0
-> Index Only Scan using trades_covering on trades t_2 (cost=0.56..5.03 rows=2 width=81) (never executed)
Index Cond: (order_uid = j.uid)
Heap Fetches: 0
-> Index Only Scan using order_rewards_pkey on order_execution oe_2 (cost=0.56..4.25 rows=3 width=65) (never executed)
Index Cond: (order_uid = t_2.order_uid)
Heap Fetches: 0
-> Index Scan using auction_prices_pkey on auction_prices ap_2 (cost=0.58..35.01 rows=16 width=40) (never executed)
Index Cond: ((auction_id = oe_2.auction_id) AND (token = CASE j.kind WHEN 'sell'::orderkind THEN j.buy_token ELSE j.sell_token END))
Planning:
Buffers: shared hit=892 read=21
I/O Timings: shared read=14.023
Planning Time: 18.375 ms
Execution Time: 1902.681 ms
```
## How to test
Due to the fact that floating point addition is not commutative and the
order specified in the old query is not deterministic (the ORDER BY uid
is merely an approximation that matches) the validation script leaves
some room for differences, 1e-9 to be precise.
Validation script
```
#!/usr/bin/env python3
"""
Compare original and optimized surplus queries for correctness.
Picks random addresses and verifies both queries return identical results.
"""
import os
import sys
import psycopg2
from psycopg2 import sql
from decimal import Decimal
# Connection settings - override with environment variables
DB_CONFIG = {
"host": os.getenv("DB_HOST", "localhost"),
"port": os.getenv("DB_PORT", "5432"),
"dbname": os.getenv("DB_NAME", "your_database"),
"user": os.getenv("DB_USER", "your_user"),
"password": os.getenv("DB_PASSWORD", ""),
}
ORIGINAL_QUERY = """
WITH regular_orders AS (
SELECT ARRAY_AGG(uid) AS ids FROM orders WHERE owner = $1
),
onchain_orders AS (
SELECT ARRAY_AGG(uid) AS ids FROM onchain_placed_orders WHERE sender = $1
),
trade_components AS (
SELECT
CASE kind
WHEN 'sell' THEN t.buy_amount
WHEN 'buy' THEN t.sell_amount - t.fee_amount
END AS trade_amount,
CASE kind
WHEN 'sell' THEN (t.sell_amount - t.fee_amount) * o.buy_amount / o.sell_amount
WHEN 'buy' THEN t.buy_amount * o.sell_amount / o.buy_amount
END AS limit_amount,
o.kind,
CASE kind
WHEN 'sell' THEN (SELECT price FROM auction_prices ap WHERE ap.token = o.buy_token AND ap.auction_id = oe.auction_id)
WHEN 'buy' THEN (SELECT price FROM auction_prices ap WHERE ap.token = o.sell_token AND ap.auction_id = oe.auction_id)
END AS surplus_token_native_price
FROM orders o
JOIN trades t ON o.uid = t.order_uid
JOIN order_execution oe ON o.uid = oe.order_uid
WHERE o.uid = ANY(ARRAY_CAT((SELECT ids FROM regular_orders), (SELECT ids FROM onchain_orders)))
UNION ALL
SELECT
CASE j.kind
WHEN 'sell' THEN t.buy_amount
WHEN 'buy' THEN t.sell_amount - t.fee_amount
END AS trade_amount,
CASE j.kind
WHEN 'sell' THEN (t.sell_amount - t.fee_amount) * j.buy_amount / j.sell_amount
WHEN 'buy' THEN t.buy_amount * j.sell_amount / j.buy_amount
END AS limit_amount,
j.kind,
CASE j.kind
WHEN 'sell' THEN (SELECT price FROM auction_prices ap WHERE ap.token = j.buy_token AND ap.auction_id = oe.auction_id)
WHEN 'buy' THEN (SELECT price FROM auction_prices ap WHERE ap.token = j.sell_token AND ap.auction_id = oe.auction_id)
END AS surplus_token_native_price
FROM jit_orders j
JOIN trades t ON j.uid = t.order_uid
JOIN order_execution oe ON j.uid = oe.order_uid
WHERE j.owner = $1 AND NOT EXISTS (
SELECT 1
FROM orders o
WHERE o.uid = j.uid
)
),
trade_surplus AS (
SELECT
CASE kind
WHEN 'sell' THEN (trade_amount - limit_amount) * surplus_token_native_price
WHEN 'buy' THEN (limit_amount - trade_amount) * surplus_token_native_price
END / POWER(10, 18) AS surplus_in_wei
FROM trade_components
)
SELECT
COALESCE(SUM(surplus_in_wei), 0) AS total_surplus_in_wei
FROM trade_surplus;
"""
OPTIMIZED_QUERY = """
WITH trade_components AS (
-- Regular orders: join trades first, then order_execution
SELECT
o.uid,
CASE o.kind
WHEN 'sell' THEN t.buy_amount
WHEN 'buy' THEN t.sell_amount - t.fee_amount
END AS trade_amount,
CASE o.kind
WHEN 'sell' THEN (t.sell_amount - t.fee_amount) * o.buy_amount / o.sell_amount
WHEN 'buy' THEN t.buy_amount * o.sell_amount / o.buy_amount
END AS limit_amount,
o.kind,
ap.price AS surplus_token_native_price
FROM orders o
JOIN trades t ON t.order_uid = o.uid
JOIN order_execution oe ON oe.order_uid = t.order_uid
LEFT JOIN auction_prices ap
ON ap.auction_id = oe.auction_id
AND ap.token = CASE o.kind WHEN 'sell' THEN o.buy_token ELSE o.sell_token END
WHERE o.owner = $1
UNION ALL
-- Onchain placed orders (if sender differs from owner)
SELECT
o.uid,
CASE o.kind
WHEN 'sell' THEN t.buy_amount
WHEN 'buy' THEN t.sell_amount - t.fee_amount
END AS trade_amount,
CASE o.kind
WHEN 'sell' THEN (t.sell_amount - t.fee_amount) * o.buy_amount / o.sell_amount
WHEN 'buy' THEN t.buy_amount * o.sell_amount / o.buy_amount
END AS limit_amount,
o.kind,
ap.price AS surplus_token_native_price
FROM onchain_placed_orders opo
JOIN orders o ON o.uid = opo.uid AND o.owner != $1
JOIN trades t ON t.order_uid = o.uid
JOIN order_execution oe ON oe.order_uid = t.order_uid
LEFT JOIN auction_prices ap
ON ap.auction_id = oe.auction_id
AND ap.token = CASE o.kind WHEN 'sell' THEN o.buy_token ELSE o.sell_token END
WHERE opo.sender = $1
UNION ALL
-- JIT orders
SELECT
j.uid,
CASE j.kind
WHEN 'sell' THEN t.buy_amount
WHEN 'buy' THEN t.sell_amount - t.fee_amount
END AS trade_amount,
CASE j.kind
WHEN 'sell' THEN (t.sell_amount - t.fee_amount) * j.buy_amount / j.sell_amount
WHEN 'buy' THEN t.buy_amount * j.sell_amount / j.buy_amount
END AS limit_amount,
j.kind,
ap.price AS surplus_token_native_price
FROM jit_orders j
JOIN trades t ON t.order_uid = j.uid
JOIN order_execution oe ON oe.order_uid = t.order_uid
LEFT JOIN auction_prices ap
ON ap.auction_id = oe.auction_id
AND ap.token = CASE j.kind WHEN 'sell' THEN j.buy_token ELSE j.sell_token END
WHERE j.owner = $1
AND NOT EXISTS (SELECT 1 FROM orders o WHERE o.uid = j.uid)
)
SELECT
COALESCE(SUM(surplus_in_wei ORDER BY uid), 0) AS total_surplus_in_wei
FROM (
SELECT
uid,
CASE kind
WHEN 'sell' THEN (trade_amount - limit_amount) * surplus_token_native_price
WHEN 'buy' THEN (limit_amount - trade_amount) * surplus_token_native_price
END / POWER(10, 18) AS surplus_in_wei
FROM trade_components
) ts;
"""
# Query to get random addresses with varying order counts
SAMPLE_ADDRESSES_QUERY = """
WITH address_order_counts AS (
SELECT owner AS address, COUNT(*) AS order_count
FROM orders
GROUP BY owner
),
bucketed AS (
SELECT
address,
order_count,
CASE
WHEN order_count < 10 THEN '0: 1-9'
WHEN order_count < 100 THEN '1: 10-99'
WHEN order_count < 1000 THEN '2: 100-999'
WHEN order_count < 10000 THEN '3: 1000-9999'
ELSE '4: 10000+'
END AS bucket
FROM address_order_counts
)
SELECT address, order_count, bucket
FROM (
SELECT address, order_count, bucket,
ROW_NUMBER() OVER (PARTITION BY bucket ORDER BY RANDOM()) AS rn
FROM bucketed
) ranked
WHERE rn <= %s
ORDER BY bucket, order_count;
"""
def get_connection():
return psycopg2.connect(**DB_CONFIG)
def fetch_sample_addresses(conn, samples_per_bucket=5):
"""Get random addresses from each order count bucket."""
with conn.cursor() as cur:
cur.execute(SAMPLE_ADDRESSES_QUERY, (samples_per_bucket,))
return cur.fetchall()
def run_query(conn, query, address):
"""Run a query with the given address parameter."""
# Convert $1 placeholder to %s for psycopg2
pg_query = query.replace("$1", "%s")
# Count how many parameters we need
param_count = pg_query.count("%s")
with conn.cursor() as cur:
cur.execute(pg_query, tuple([address] * param_count))
result = cur.fetchone()
return result[0] if result else None
def compare_results(original, optimized, tolerance=1e-9):
"""Compare two numeric results with floating point tolerance."""
if original is None and optimized is None:
return True, "both NULL"
if original is None or optimized is None:
return False, f"NULL mismatch: original={original}, optimized={optimized}"
# Convert to float for comparison
orig_float = float(original)
opt_float = float(optimized)
if orig_float == opt_float:
return True, "exact match"
# Check relative difference for non-zero values
if orig_float != 0:
rel_diff = abs(orig_float - opt_float) / abs(orig_float)
if rel_diff < tolerance:
return True, f"within tolerance (rel_diff={rel_diff:.2e})"
# Check absolute difference for values near zero
abs_diff = abs(orig_float - opt_float)
if abs_diff < tolerance:
return True, f"within tolerance (abs_diff={abs_diff:.2e})"
return False, f"MISMATCH: original={orig_float}, optimized={opt_float}, diff={abs_diff}"
def main():
samples_per_bucket = int(sys.argv[1]) if len(sys.argv) > 1 else 5
print(f"Comparing original vs optimized query ({samples_per_bucket} samples per bucket)")
print("=" * 80)
conn = get_connection()
# Get sample addresses
print("\nFetching sample addresses...")
addresses = fetch_sample_addresses(conn, samples_per_bucket)
print(f"Found {len(addresses)} addresses across buckets\n")
passed = 0
failed = 0
current_bucket = None
for address, order_count, bucket in addresses:
if bucket != current_bucket:
current_bucket = bucket
print(f"\n--- Bucket: {bucket} ---")
# Run both queries
original_result = run_query(conn, ORIGINAL_QUERY, address)
optimized_result = run_query(conn, OPTIMIZED_QUERY, address)
# Compare
match, reason = compare_results(original_result, optimized_result)
addr_hex = "0x" + address.hex() if isinstance(address, (bytes, memoryview)) else str(address)
status = "✓" if match else "✗"
print(f" {status} {addr_hex[:18]}... ({order_count:>5} orders): {reason}")
if match:
passed += 1
else:
failed += 1
# Print detailed values on failure
print(f" Original: {original_result}")
print(f" Optimized: {optimized_result}")
# Summary
print("\n" + "=" * 80)
print(f"SUMMARY: {passed} passed, {failed} failed out of {passed + failed} tests")
conn.close()
return 0 if failed == 0 else 1
if __name__ == "__main__":
sys.exit(main())
```
To validate the performance, I think it's best we give it a run in prod
for anywhere from 30 minutes to 2 hours.
Even while requiring indexes, the new query *should* be faster.
* Filter refunded ethflow orders from all solvable orders query (#4129)
# Description
In a recent change the query to return ALL solvable orders suddenly
returned ~45K orders more. This caused an increased memory usage on the
start of the autopilot and made the DB query slower than it could be.
# Changes
Filter out refunded ethflow orders from solvable orders query.
## How to test
confirmed with a manual query execution that the number of returned
orders is in line with the final_auction_size + filtered_out_queries
indicating that the all_solvable_orders query and the incremental logic
afterwards agree with each other.
increase in memory usage
first auction after restart is huge
* Upgrade `time` crate (#4130)
Upgrades the `time` crate to satisfy `cargo audit`.
* Tighter filter on all solvable orders query (#4131)
# Description
Forgot that I already hit `merge when ready` on
https://github.com/cowprotocol/services/pull/4129 so I was to slow to
merge the same optimization for the open orders query.
* Do not panic on failure to acquire connections to store events (#4132)
# Description
During a particularly bad period of volatility we failed to acquire a DB
connection on time which lead to a panic
Partial Stacktrace
```
1770314825856 2026-02-05T18:07:05.856Z 2026-02-05T18:07:03.033Z ERROR observe::tracing: thread 'tokio-runtime-worker' panicked at /src/crates/autopilot/src/infra/persistence/mod.rs:301:54:
1770314825856 2026-02-05T18:07:05.856Z failed to acquire tx: PoolTimedOut
1770314825856 2026-02-05T18:07:05.856Z stack backtrace:
1770314825856 2026-02-05T18:07:05.856Z 0: observe::tracing::tracing_panic_hook
1770314825856 2026-02-05T18:07:05.856Z at ./src/crates/observe/src/tracing.rs:187:21
1770314825856 2026-02-05T18:07:05.856Z 1: as core::ops::function::Fn>::call
1770314825856 2026-02-05T18:07:05.856Z at ./rustc/254b59607d4417e9dffbc307138ae5c86280fe4c/library/alloc/src/boxed.rs:2220:9
1770314825856 2026-02-05T18:07:05.856Z 2: observe::panic_hook::install::{{closure}}
1770314825856 2026-02-05T18:07:05.856Z at ./src/crates/observe/src/panic_hook.rs:14:9
1770314825856 2026-02-05T18:07:05.856Z 3: as core::ops::function::Fn>::call
1770314825856 2026-02-05T18:07:05.856Z at ./rustc/254b59607d4417e9dffbc307138ae5c86280fe4c/library/alloc/src/boxed.rs:2220:9
1770314825856 2026-02-05T18:07:05.856Z 4: std::panicking::panic_with_hook
1770314825856 2026-02-05T18:07:05.856Z at ./rustc/254b59607d4417e9dffbc307138ae5c86280fe4c/library/std/src/panicking.rs:833:13
1770314825856 2026-02-05T18:07:05.856Z 5: std::panicking::panic_handler::{{closure}}
1770314825856 2026-02-05T18:07:05.856Z at ./rustc/254b59607d4417e9dffbc307138ae5c86280fe4c/library/std/src/panicking.rs:698:13
1770314825856 2026-02-05T18:07:05.856Z 6: std::sys::backtrace::__rust_end_short_backtrace
1770314825856 2026-02-05T18:07:05.856Z at ./rustc/254b59607d4417e9dffbc307138ae5c86280fe4c/library/std/src/sys/backtrace.rs:176:18
1770314825856 2026-02-05T18:07:05.856Z 7: __rustc::rust_begin_unwind
1770314825856 2026-02-05T18:07:05.856Z at ./rustc/254b59607d4417e9dffbc307138ae5c86280fe4c/library/std/src/panicking.rs:689:5
1770314825856 2026-02-05T18:07:05.856Z 8: core::panicking::panic_fmt
1770314825856 2026-02-05T18:07:05.856Z at ./rustc/254b59607d4417e9dffbc307138ae5c86280fe4c/library/core/src/panicking.rs:80:14
1770314825856 2026-02-05T18:07:05.856Z 9: core::result::unwrap_failed
1770314825856 2026-02-05T18:07:05.856Z at ./rustc/254b59607d4417e9dffbc307138ae5c86280fe4c/library/core/src/result.rs:1867:5
1770314825856 2026-02-05T18:07:05.856Z 10: core::result::Result::expect
1770314825856 2026-02-05T18:07:05.856Z at ./rustc/254b59607d4417e9dffbc307138ae5c86280fe4c/library/core/src/result.rs:1185:23
1770314825856 2026-02-05T18:07:05.856Z 11: autopilot::infra::persistence::Persistence::store_order_events::{{closure}}
1770314825856 2026-02-05T18:07:05.856Z at ./src/crates/autopilot/src/infra/persistence/mod.rs:301:54
```
# Changes
- [ ] Remove the panic
- [ ] Log on error and continue
## How to test
NA
* Normalize approximation native token decimals (#4125)
# Description
Instead of validating that native price approximation token pairs have
matching decimals at startup, this PR normalizes prices based on the
decimal difference between tokens, as was suggested in another PR
comment[[link](https://github.com/cowprotocol/services/pull/4119#pullrequestreview-3749864175)].
# Changes
- Added `ApproximationToken` type that stores both the approximation
address and a normalization factor `(10^(to_decimals - from_decimals))`
- Factory fetches decimals for all approximation token pairs at startup
and computes normalization factors
- Price approximation now multiplies the fetched price by the
normalization factor, correctly handling tokens with different decimals
## How to test
Added unit tests for normalization in both directions (source > target
decimals and target > source decimals)
* Create composite index orders(owner, class, true_valid_to) (#4133)
# Description
The create_order endpoint is suffering from latency issues due to the
`user_orders_with_quote` being super slow (we've seen up to 50s), this
PR adds an index and removes the MATERIALIZE keyword to provide more
optimization opportunities for the query planner
Plan before
```
Nested Loop (cost=29.14..122.50 rows=1 width=58) (actual time=0.036..0.038 rows=0 loops=1)
Buffers: shared hit=4
-> Nested Loop Anti Join (cost=28.58..113.92 rows=1 width=79) (actual time=0.036..0.037 rows=0 loops=1)
Buffers: shared hit=4
-> Nested Loop Anti Join (cost=28.44..97.75 rows=1 width=79) (actual time=0.036..0.037 rows=0 loops=1)
Buffers: shared hit=4
-> Nested Loop Anti Join (cost=28.17..89.44 rows=1 width=79) (actual time=0.036..0.037 rows=0 loops=1)
Buffers: shared hit=4
-> Nested Loop Anti Join (cost=27.89..73.21 rows=1 width=79) (actual time=0.036..0.037 rows=0 loops=1)
Buffers: shared hit=4
-> Bitmap Heap Scan on orders o (cost=27.62..64.90 rows=1 width=79) (actual time=0.035..0.036 rows=0 loops=1)
Recheck Cond: ((true_valid_to >= '4294967295'::bigint) AND (owner = '\xfd659bc79a2b542728e3f372870d22ed31358ed6'::bytea))
Filter: ((cancellation_timestamp IS NULL) AND (class = 'limit'::orderclass) AND (((kind = 'sell'::orderkind) AND (COALESCE((SubPlan 1), '0'::numeric) < sell_amount)) OR ((kind = 'buy'::orderkind) AND (COALESCE((SubPlan 2), '0'::numeric) < buy_amount))))
Buffers: shared hit=4
-> BitmapAnd (cost=27.62..27.62 rows=1 width=0) (actual time=0.033..0.034 rows=0 loops=1)
Buffers: shared hit=4
-> Bitmap Index Scan on orders_true_valid_to (cost=0.00..4.51 rows=10 width=0) (actual time=0.023..0.023 rows=312 loops=1)
Index Cond: (true_valid_to >= '4294967295'::bigint)
Buffers: shared hit=3
-> Bitmap Index Scan on order_owner (cost=0.00..22.86 rows=381 width=0) (actual time=0.003..0.003 rows=0 loops=1)
Index Cond: (owner = '\xfd659bc79a2b542728e3f372870d22ed31358ed6'::bytea)
Buffers: shared hit=1
SubPlan 1
-> Aggregate (cost=16.62..16.63 rows=1 width=32) (never executed)
-> Index Scan using trade_order_uid on trades (cost=0.56..16.61 rows=3 width=11) (never executed)
Index Cond: (order_uid = o.uid)
SubPlan 2
-> Aggregate (cost=16.62..16.63 rows=1 width=32) (never executed)
-> Index Scan using trade_order_uid on trades trades_1 (cost=0.56..16.61 rows=3 width=11) (never executed)
Index Cond: (order_uid = o.uid)
-> Index Only Scan using ethflow_refunds_pkey on ethflow_refunds r (cost=0.27..4.29 rows=1 width=57) (never executed)
Index Cond: (order_uid = o.uid)
Heap Fetches: 0
-> Index Only Scan using invalidations_order_uid on invalidations i (cost=0.28..8.29 rows=1 width=57) (never executed)
Index Cond: (order_uid = o.uid)
Heap Fetches: 0
-> Index Only Scan using onchain_order_invalidations_pkey on onchain_order_invalidations oi (cost=0.27..4.29 rows=1 width=57) (never executed)
Index Cond: (uid = o.uid)
Heap Fetches: 0
-> Index Only Scan using okay_onchain_orders on onchain_placed_orders op (cost=0.14..8.16 rows=1 width=57) (never executed)
Index Cond: (uid = o.uid)
Heap Fetches: 0
-> Index Scan using order_quotes_pkey on order_quotes o_quotes (cost=0.56..8.57 rows=1 width=93) (never executed)
Index Cond: (order_uid = o.uid)
Planning:
Buffers: shared hit=95
Planning Time: 0.816 ms
Execution Time: 0.101 ms
```
Plan after
```
Hash Anti Join (cost=2977.50..115918.76 rows=1386 width=67) (actual time=0.012..0.014 rows=0 loops=1)
Hash Cond: (o.uid = op.uid)
Buffers: shared hit=4
-> Hash Anti Join (cost=2918.73..115842.49 rows=1386 width=124) (actual time=0.012..0.013 rows=0 loops=1)
Hash Cond: (o.uid = i.order_uid)
Buffers: shared hit=4
-> Nested Loop (cost=2798.94..115705.20 rows=1386 width=124) (actual time=0.012..0.013 rows=0 loops=1)
Buffers: shared hit=4
-> Hash Anti Join (cost=2798.38..103609.69 rows=1412 width=81) (actual time=0.012..0.013 rows=0 loops=1)
Hash Cond: (o.uid = oi.uid)
Buffers: shared hit=4
-> Hash Anti Join (cost=2186.48..102979.96 rows=1414 width=81) (actual time=0.012..0.012 rows=0 loops=1)
Hash Cond: (o.uid = r.order_uid)
Buffers: shared hit=4
-> Index Scan using idx_orders_owner_class_valid on orders o (cost=0.56..100776.17 rows=1419 width=81) (actual time=0.011..0.012 rows=0 loops=1)
Index Cond: ((owner = '\xfd659bc79a2b542728e3f372870d22ed31358ed6'::bytea) AND (class = 'limit'::orderclass) AND (true_valid_to >= '4294967295'::bigint))
Filter: ((cancellation_timestamp IS NULL) AND (((kind = 'sell'::orderkind) AND (COALESCE((SubPlan 1), '0'::numeric) < sell_amount)) OR ((kind = 'buy'::orderkind) AND (COALESCE((SubPlan 2), '0'::numeric) < buy_amount))))
Buffers: shared hit=4
SubPlan 1
-> Aggregate (cost=8.60..8.61 rows=1 width=32) (never executed)
-> Index Only Scan using idx_trades_covering on trades (cost=0.56..8.59 rows=2 width=9) (never executed)
Index Cond: (order_uid = o.uid)
Heap Fetches: 0
SubPlan 2
-> Aggregate (cost=8.60..8.61 rows=1 width=32) (never executed)
-> Index Only Scan using idx_trades_covering on trades trades_1 (cost=0.56..8.59 rows=2 width=11) (never executed)
Index Cond: (order_uid = o.uid)
Heap Fetches: 0
-> Hash (cost=1515.41..1515.41 rows=53641 width=57) (never executed)
-> Seq Scan on ethflow_refunds r (cost=0.00..1515.41 rows=53641 width=57) (never executed)
-> Hash (cost=398.62..398.62 rows=17062 width=57) (never executed)
-> Seq Scan on onchain_order_invalidations oi (cost=0.00..398.62 rows=17062 width=57) (never executed)
-> Index Scan using order_quotes_pkey on order_quotes o_quotes (cost=0.56..8.57 rows=1 width=100) (never executed)
Index Cond: (order_uid = o.uid)
-> Hash (cost=78.24..78.24 rows=3324 width=57) (never executed)
-> Seq Scan on invalidations i (cost=0.00..78.24 rows=3324 width=57) (never executed)
-> Hash (cost=53.80..53.80 rows=398 width=57) (never executed)
-> Index Only Scan using okay_onchain_orders on onchain_placed_orders op (cost=0.27..53.80 rows=398 width=57) (never executed)
Heap Fetches: 0
Planning:
Buffers: shared hit=95
Planning Time: 0.833 ms
Execution Time: 0.071 ms
```
# Changes
- [ ] Adding the composite index
- [ ] Dropping the MATERIALIZE
## How to test
Create index in prod, push a test image, though this should be an easy
win
* Update CLAUDE.md (#4128)
Adds some details about the project that help Claude provide better
results.
* Mount flyway.conf in docker-compose.yaml (#4138)
# Description
Concurrent index creation with flyway requires a configuration parameter
to be set to avoid deadlocks in postgres. This setting was already
configured and shipped in the built docker images but the
`docker-compose.yaml` file that's used to spin up a DB locally for
running e2e tests for example does not mount that file yet which leads
to migrations deadlocking when you run `docker compose up`
# Changes
mount `flyway.conf` in `docker-compose.yaml`.
## How to test
run `docker compose up` from the repo root and check that migrations
finished successfully
* Fix flaky autopilot follower e2e test (#4139)
# Description
Fixes the flaky autopilot follower e2e test that fails almost always on
#4136. After adding some logs, etc, I could finally find all the
possible race conditions and fix the test assertions.
* Optimize autopilot maintenance (#4141)
# Description
Currently the autopilot maintenance is on the critical path before we
can build a new auction. But some of the work that's being done is
actually not necessary to build fully updated auctions. Steps that are
currently not essential are:
* pruning the DB
* associating a settlement with a proposed solution (as long as we
process all events of a settlement we know which orders have been
filled)
Ever since there are smart contracts that are listed as solvers
attributing a settlement to a solution is pretty time consuming since we
need to use `debug_traceTransaction`. This regularly takes hundreds of
milliseconds so moving this off of the hot path will be a huge win.
# Changes
To account for that the maintenance now distinguishes between essential
tasks and optional tasks. In order to move settlement attribution our of
the essentials I moved the settlement observer out of the settlement
event indexer into the autopilot maintenance component. Also now that we
have this split we can move ethflow refund indexing into the autopilot
maintenance under the optional category.
## How to test
existing e2e tests for general correctness
manual deployment to prod to confirm speed improvement
Tested on prod together with some other change.
1: current setup
2: new node infra
3: new node infra + this PR
* [M2] Integrate block explorer URL override for Otterscan (#4077)
## Summary
This is a copy of [a stale
PR](https://github.com/cowprotocol/services/pull/4012)
This PR delivers part of **Milestone 2: Frontend Integration** of the
[CoW Grants Program RFP: CoW Protocol Playground Block Explorer
Integration](https://forum.cow.fi/t/grant-application-cow-protocol-playground-block-explorer-integration/3284/1)
proposal by CoBuilders.
Updates the CoW Swap and Explorer Dockerfiles to use
`REACT_APP_BLOCK_EXPLORER_URL`, enabling all block explorer links to
point to the local Otterscan instance (port 8003) instead of Etherscan.

## Milestone 2 Deliverables
### CoW Swap Frontend Integration
- [x] Configure `REACT_APP_BLOCK_EXPLORER_URL=http://localhost:8003` in
build
- [x] Transaction hash links point to local Otterscan
- [x] Address links point to local Otterscan
- [x] All navigation flows work correctly
### CoW Explorer Frontend Integration
- [x] Configure `REACT_APP_BLOCK_EXPLORER_URL=http://localhost:8003` in
build
- [x] "View on Blockchain" links point to local Otterscan
- [x] Address and token links point to local Otterscan
- [x] All navigation flows work correctly
### Success Criteria
> *"One-click navigation from frontends to the local block explorer for
all transactions and addresses"*
- Clicking any explorer link in CoW Swap (port 8000) → Opens in
Otterscan (port 8003)
- Clicking any explorer link in CoW Explorer (port 8001) → Opens in
Otterscan (port 8003)
## Changes
### Modified Files
| File | Changes |
|------|---------|
| `Dockerfile.cowswap` | Added `REACT_APP_BLOCK_EXPLORER_URL` build arg
|
| `Dockerfile.explorer` | Added `REACT_APP_BLOCK_EXPLORER_URL` env var |
## Architecture
```
┌─────────────┐ ┌─────────────┐
│ CoW Swap │ │ CoW Explorer│
│ (port 8000) │ │ (port 8001) │
└──────┬──────┘ └──────┬──────┘
│ │
│ All explorer │
│ links now │
│ point to ───────┤
│ │
└───────────┬───────┘
│
▼
┌─────────────┐
│ Otterscan │
│ (port 8003) │
└─────────────┘
```
## Dependencies
This PR depends on:
- **PR:** cowprotocol/cowswap#XXX - Adds `REACT_APP_BLOCK_EXPLORER_URL`
env var support
## Testing
1. Start the playground:
```bash
docker compose -f docker-compose.fork.yml up --build
```
2. Open CoW Swap at `http://localhost:8000`:
- Make a swap or view transaction history
- Click any "View on Explorer" or transaction link
- **Expected:** Opens `http://localhost:8003/tx/{hash}`
3. Open CoW Explorer at `http://localhost:8001`:
- Browse any order or transaction
- Click any address or transaction link
- **Expected:** Opens `http://localhost:8003/address/{addr}`
4. Verify Otterscan shows the transaction/address details with full
traces
## Demo
1. User clicks transaction in CoW Swap
2. Otterscan opens with full transaction details
3. Traces, logs, and gas profiling visible locally
## Milestones
| Milestone | Description | Status |
|-----------|-------------|--------|
| M1 | Otterscan Integration | [PR
#4000](https://github.com/cowprotocol/services/pull/4000) |
| M2 | Frontend Integration | **This PR** (+ cowswap PR) |
| M3 | Documentation | Pending |
---
*Submitted by [CoBuilders](https://cobuilders.xyz) as part of the CoW
Grants Program*
---------
Co-authored-by: Ignacio
Co-authored-by: Claude Opus 4.5
* Fix true_valid_to updating (#4134)
# Description
`true_valid_to` is not always updated as needed. It can happen that
ethflow order events are parsed first, before order creation takes place
which results in `true_valid_to` to first be set correctly, and then set
to `u32::MAX` when inserting the order.
Ethflow orders as a whole get parsed off onchain events and the logic
(regarding the above) currently is as follows:
Custom onchain data parser would pick up on the Ethflow related events
and insert the ethflow_orders row with correct order uid and valid_to. I
have included logic to update related order's true_valid_to to the same
value, but it does not exist in the db yet
Orders parsed from order placement events will get inserted into the
database, ignoring conflicts. Since the newly created ethflow order does
not yet exist in the database, it will get inserted with the valid_to
set as u32::MAX and true_valid_to having the same value.
There is no other point in time for the true_valid_to to get correctly
updated, which leaves us with two options:
Use the smaller of two: ethflow_orders.valid_to, orders.valid_to when
inserting an order.
Change the order of how onchain events are parsed - first parse the
order creation events and only then append the custom info (which
includes ethflow).
The solution 1 seems more robust since We will always end up with the
smallest value when inserting an order.
I am not sure what might the implications of changing the onchain event
parsing order.
# Changes
Adds a clause
```sql
COALESCE(
(SELECT LEAST($21, valid_to) FROM ethflow_orders WHERE uid = $1),
$21
)
```
to INSERT_ORDER query which will always take the smallest of
`ethflow_orders.valid_to` and the value currently being inserted.
# Deployment
When hotfix is applied, services will correctly attribute
`true_valid_to` and manual backfill will be performed.
## How to test
Tested on ethflow E2E test `local_node_eth_flow_tx` confirmed the faulty
behaviour can occur and added assert that ensures the resulting
true_valid_to is **not** `u32::MAX`
---------
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Martin Magnus
* Shared native price cache (#4136)
# Description
Replaces #4044. Once we started forwarding native price estimates from
the orderbook to autopilot, CoinGecko API usage went up. This happened
because the estimator moved to autopilot, which now handles all requests
and also relies on CoinGecko.
This PR refactors native price estimation in a way described below,
according to the diagram created by @MartinquaXD:
# Changes
- Split `CachingNativePriceEstimator` into three focused components: a
passive `Cache` (shared data store), a
`CachingNativePriceEstimator` (on-demand price fetching with caching),
and a `NativePriceUpdater` (background maintenance worker).
- The autopilot now creates a single shared `Cache` instance used by
both the API-facing estimator and the auction
competition estimator, eliminating duplicate price fetches for the same
tokens.
- Added an `--api-native-price-estimators` flag to the autopilot,
allowing the API endpoint to use different native price estimator
sources than the auction pipeline (falls back to
`--native-price-estimators`, if unset).
- Replaced the implicit priority-based update system (`high_priority` +
`replace_high_priority`) with an explicit token tracking via
`set_tokens_to_update()`, called during the solvable orders cache
building in the autopilot.
- Moved cache + updater wiring out of the shared factory into each
binary, so each service composes the shared building blocks as needed:
- Orderbook: creates its own `Cache` + `CachingNativePriceEstimator`.
- Autopilot: Creates 2 separate `CachingNativePriceEstimators` that
share a single instance of `Cache`. One of the estimators is wrapped
with the `NativePriceUpdater`, which is used in the auction competition.
Another one serves the autopilot's API request without a maintenance
task.
- Removed the unused `--native-price-cache-max-update-size` flag (dead
code after the refactoring removed the truncation logic).
## How to test
Existing tests + staging and prod.
# Follow-up tasks
- The cache is unbounded. This needs to be revisited, and probably
adding a simple LRU cache would be safer.
* Skip checks for defined appCodes (#4118)
# Description
For the integration with Euler we want to skip balance checks, because
the order will get the necessary funds from wrapper execution. This PR
skip balance checks where wrappers are defined, mirroring what we do for
flash loans with flash loan hints.
Signature checks are skipped for all 1271 orders, but kept for
presign/Eip712 as these should always be valid independent of
prehooks/wrappers. We have been running this way in prod for a while and
I just cleaned up the flags.
# Changes
- [x] Skip balance validation for ordres with wrappers
- [x] A cache so we don't keep parsing appdata for every auction
- [x] Nuked disable_1271_order_sig_filter and
disable_1271_order_balance_filter config flags - 1271 now just always
skips these checks
## How to test
Unit tests.
* Migrate orderbook API from warp to axum (#4080)
# Description
This PR migrates the orderbook API from Warp to Axum. The migration
modernizes our web framework while maintaining API
compatibility, with improved code organization and reduced complexity
(~200 lines removed).
# Changes
- Replace Warp filters with Axum Router and centralized AppState for
dependency injection
- Migrate all 18 API endpoints (v1 and v2) to Axum handler functions
- Update dependencies: remove warp, add axum, tower, tower-http
- Reorganize routes hierarchically with .nest(), alphabetically by
prefix
- Fix route conflicts using .merge() for multiple HTTP methods on same
path
- Fix bug in get_trades_v2 (use database_read instead of database_write)
- Add comprehensive E2E test suite for HTTP behavior validation in
malformed_requests.rs
# How to test
Existing tests + staging
I deployed these changes to base staging to ensure metrics were working,
here's the graph
Follow up:
Unmarked spots are running `main`, the wrong image was labeling
endpoints with unknown because it was a fallback.
That code has been removed and replaced with the current metric labeling
scheme.
That scheme can be improved (read, made less verbose and error prone
while being more general) but we need to change the metrics label, which
I didn't do to minimize changes.
---------
Co-authored-by: Claude
* Propagate request ID from Forwarder (#4150)
# Description
I wanted to get all logs for a quote request, but when I searched for
request ID in OpenSearch I only got requests from the orderbook but none
from the autopilot which should have shown native price fetching. This
PR adds request ID propagation to the forwarder.
* Add openAPI reference to ink (#4111)
# Description
Added Ink staging and prod URLs for OpenAPI spec
* Don't re-hash appdata every time (#4152)
# Description
A surprising amount of time when building a new auction is lost when
assembling the final orders. This step involves inspecting the appdata
and recovering the partner fee from that.
The current implementation has 2 major flaws:
* it re-parses the appdata during every auction
* it parses AND hashes the data in every auction
While the ideal fix would be to only parse the appdata once this is more
involved and we can already get an easy win by just omitting the hashing
part. I'll follow up with a PR that avoids the unnecessary parsing as
well.
# Changes
- don't validate the appdata only parse it since that skips the
re-hashing of the data which we don't need at this point
## How to test
Measured performance with tempo
`assemble_orders` went from 88ms to 50ms
Before
After
---------
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Move storing order events fully off the hot path (#4149)
# Description
While building a new auction we also store a bunch of order events for
debugging purposes. This already happens mostly in a background task but
the conversion from the owned collection to a collection of the type the
persistence layer expects still happens on the hot path.
# Changes
Introduce a second function for storing order events which takes a
collection (`impl IntoIterator`) and a conversion function. This then
allows us to move the collection as is into the background task and do
the conversion there.
## How to test
I measured the optimization using tempo but the exact numbers are a bit
hard to nail down because only some of the instrumented logic is on the
hot path and it doesn't get displayed that well in the tempo UI.
Based on the time and size of the `assemble_orders` span it looks like
the new version shaves off ~45ms or so.
Before
After
* Make autopilot sync more granular (#4144)
# Description
While https://github.com/cowprotocol/services/pull/4141 achieved the
goal of reducing the time before we build a fresh auction it also came
with the oddity that the metrics suggest slower order execution while
the time to happy moo SLI was very healthy.
The reason for the weird metrics is that the autopilot task that
monitors for landed transactions previously waited for ALL of the
maintenance task to finish before looking up the settlement from the DB
(see
[here](https://github.com/cowprotocol/services/blob/main/crates/autopilot/src/run_loop.rs#L843-L850))
while the PR unintentionally changed this part as well to only wait for
the minimum processing.
Improved latency metrics
Degraded runloop and settle metrics
Despite not degraded time to happy moo
# Changes
Fix metrics by allowing `MaintenanceSync` to either wait for partial or
full processing of the given block. Before building the auction we now
explicitly await partial processing to be done while later on when we
determine whether a solution was submitted we wait for the block to be
fully processed.
# Alternatives Considered
* have 1 update channel for every maintenance sub task and have it push
updates => discarded because it's more granular than we need
* replace watch stream with struct with atomic counters for every update
type => discarded because awaiting changes on those counters is more
complicated than just 2 watch streams
Overall I'm not super happy with the solution so I'm happy to hear
alternative suggestions if you have any.
* Store orders and quotes reference counted in auction (#4153)
# Description
Currently the solvable orders cache stores raw owned instances of orders
and quotes.
This is painful for 2 reasons:
* `solvable_orders_after()` clones all orders and quotes to do the
incremental update (see
[here](https://github.com/cowprotocol/services/blob/main/crates/autopilot/src/solvable_orders.rs#L377-L378))
* `update()` clones all orders at the start (see
[here](https://github.com/cowprotocol/services/blob/main/crates/autopilot/src/solvable_orders.rs#L172-L176))
Both of these can be made very cheap by storing `Arc`ed instances.
# Alternatives considered
Theoretically one could also collect `&Order` when building the auction
and use `std::mem::take()` to move the existing hashmaps into
`solvable_orders_after()`. But using `&Order` is less flexible and more
complicated and `std::mem::take()` requires extra attention when
handling errors in `solvable_orders_after()` to not leave the cache in a
broken state or completely empty.
# Changes
- put all orders and quotes in `Arc`s.
## How to test
I only tested the approach with using `&Order` but it's reasonable to
assume that the improvement for `cloning_relevant_orders()` will be very
similar when cloning `Arc`s instead of collecting references.
Also I expect the highlighted section of `get_solvable_orders` (1st
screenshot) to disappear as well with this PR.
Both speed ups would combine to ~50ms.
Before
After
* Skip tx simulation on endpoints that don't mine reverts (#4143)
# Description
Based on our logs it seems like simulating a tx before submission can
take up to 500ms. Since our submission logic know which mempool mines
reverting txs and which don't we can simply skip the simulation step
when the current mempool does not mine reverting txs.
# Changes
skip tx simulation (estimate_gas()) in mempools that don't mine
reverting txs (e.g. mevblocker).
* Remove price filtering from autopilot (#4148)
# Description
First PR in a series of small optimizations in the auction building
logic.
# Changes
removes filtering of orders based on the existing native prices
this feature was never enabled and with the stronger focus on filtering
as little as possible in the autopilot it should also not be enabled in
the future
* Speed up removing old orders and quotes (#4151)
# Description
The incremental solvable orders query so far blindly inserted updated
orders in to the set of open orders and then ran a filtering step over
ALL open orders and quotes separately.
This is pretty wasteful since the new/updated orders are significantly
fewer than the set of ALL orders and 3 of 4 things we check we only need
to check on the new/updated orders.
Also we don't have to go over ALL quotes if we just remove the quotes
together with the orders.
# Changes
- determine whether to insert or remove orders based on the new
information returned by the incremental DB query
- whenever we remove an order we also remove the associated quote to
never run do a `.retain()` on ALL quotes
- still do a `.retain()` on the open orders to find expired orders as
the incremental orders query will not flag those - while we still scan
the whole list twice the most complicated checks could be moved to the
part that only runs on the updated orders so this `.retain()` still is a
lot faster than before.
## How to test
Measured performance with tempo
Retain orders went from 2.5ms to 283µs
and we dropped the 6.6ms from retaining quotes completely
Before
After
* Speed up auction metrics (#4155)
# Description
A surprisingly big amount of time in the auction building process is
wasted with metrics.
By far the biggest offender is the function `checkpoint()` which figures
out which orders got filtered out since the last checkpoint. It does it
by cloning the currently alive orders and removing the still alive
orders from that map one by one. All the orders that are left over are
no longer alive.
This regularly incurs an overhead of a couple milliseconds each while
the alternative function `checkpoint_by_invalid_orders()` (which gets
the removed orders passed in) only takes a few microseconds.
Additionally constructing the an `OrderFilterCounter` also take ~5ms
because it clones the original set of orders and counts them already
there.
# Changes
- drop `OrderFilterCounter` in favor of function on the metrics
- from all functions return a list of filtered orders such that we don't
have to do a ton of computations to diff the orders before and after a
filter function
- fixed resulting compile errors in the tests
This technically introduces breaking changes but IMO those are well
worth it:
* we don't populate the gauges once at the start of the process and once
at the end - instead we update individual gauges as we go
* some orders can **technically** be double counted. Since filtering for
banned users, unsupported tokens and invalid signatures happens in
parallel and happens separately the same order can be counted for
multiple things. The orders filtered that way are relatively few and
having the chance that orders fit multiple categories is even lower. On
the plus side if there are multiple things wrong with an order we now
learn about it. Since the exact numbers of filtered orders are not super
interesting anyway one can even consider this a debugging improvement.
* Remove unused config options / features (#4156)
# Description
This started out as an investigation into speeding up deny-listed token
filtering in the auction building process but I realized that there is
still some unfinished work of migrating away from the tracing based bad
token detection.
We already moved away from that bad token detection mechanism a while
ago but I didn't fully delete all the related code yet in case the new
mechanism doesn't work well enough. Since then we've been running the
services without the feature for many months so it's time to remove that
stuff now.
We are deleting so much here because only the tracing detector was using
all the logic to find owners of certain tokens onchain so that also went
with it.
Once that was done I also went ahead and tried to find any other args
that are unused.
# Changes
- remove `tracing_url` parameter which made the tracing bad token
detector unused
- removed tracing detector which made token owner finding stuff unused
- removed token owner finding stuff which made liquidity source configs
unused
- removed any other args that weren't used
## How to test
compiler
* Bound native price cache with moka (#4154)
# Description
The native price cache is backed by an unbounded `Mutex>`. Entries are inserted on every price estimate but never
removed. Once at steady state with many unique tokens, the cache grows
without bound.
The size limit is currently hardcoded at 20k, since on mainnet we have
around that number of unique tokens:
```sql
SELECT COUNT(*) AS unique_token_count
FROM (SELECT sell_token AS token
FROM orders
UNION
SELECT buy_token AS token
FROM orders) t;
Returns -> 20109
```
Per cache entry breakdown:
- CachedResult value: ~32 bytes
- Address key: 20 bytes
- Moka internal overhead: ~100-120 bytes
- Total per entry: ~170 bytes
At 20,000 entries: ~3.4 MB upper bound
# Changes
- Replace the `Mutex>` cache with `moka::sync::Cache`.
- Adapt get_cached_price():
- No more MutexGuard parameter. Use data.get(&token) which returns
Option (moka clones the value). Check staleness +
is_ready() on the returned value. No `requested_at` to update, since
moka tracks access internally.
- Remove the `requested_at` field from the `CachedResult` since it is
not needed anymore and turned out to be dead code.
- Adapt the `insert()` function to use
`entry_by_ref().and_compute_with()`, which gives gives atomic
read-modify-write for `accumulative_errors_count`.
## How to test
Existing tests.
* Simplify deny listed tokens (#4157)
# Description
Originally the orderbook and autopilot tried to detect tokens with
unsupported behavior with sophisticated simulations.
Since then we:
* onboarded more solvers that could handle tokens that were previously
causing issues
* introduced quote simulation that can detect such tokens more reliably
* moved towards minimal intervention for problematic tokens in the
protocol itself
Today the only thing we actually make use of is a list of tokens that
are actually deny listed. Those should probably be revisited as well but
for now I decided to only simplify the code we have today while keeping
feature parity.
# Changes
- turned `ListBasedDetector` into a simple wrapper around a HashSet
- given that there is no more complicated or fallible logic in the
detection mechanism I decided to drop the instrumentation as well
This simplification should also drastically reduce the ~30ms we
currently spend on filtering out orders that trade deny-listed tokens.
## How to test
existing e2e tests
* Extract common utils, serialization to shared and serde-ext (#4142)
# Description
The simulation refactoring PR (#4140) is large due to some common types
being moved out to `shared`. This PR covers these aspects and moves
common `driver` utilities to `shared`. Alongside these common
(de)serialization logic is moved to new crate `serde-ext`
# Changes
- [x] Move driver::util::bytes to `shared`
- [x] Remove util::Bytes from `autopilot`
- [x] Rename shared::ethrpc to web3 for a better name and to avoid
naming conflicts with the `ethrpc` crate
- [x] Move common (de)serialization logic to new `serde-ext` and use it
throughout `driver` and `solvers-dto`
## How to test
- E2E tests
- [ ] Staging deployment works
* Add TOML configuration to the autopilot (#4147)
# Description
Kicks off #4005; to start only one of the more annoying arguments was
migrated to validate the approach.
# Changes
- [ ] Add an optional config path
- [ ] Remove the drivers CLI arg
- [ ] Move the drivers argument to the TOML parsing
## How to test
* Migrate the drivers argument to TOML in the infra repo
* Run in staging
* autopilot: send `/solve` requests with ref-counted body (#4159)
# Description
Currently the way the autopilot serializes `/solve` requests is still
sub optimal. While it does indeed only serialize the `/solve` requests
once it still allocates memory for every HTTP request it ultimately
sends.
Since `reqwest` also supports `Bytes` as the request body which are
already references counted we can save a bunch of allocating and copying
data by serializing the auction data into a `Bytes` instance and cloning
that into the individual `/solve` HTTP requests.
# Changes
- changes internal members of `solve::Request` from
`serde_json::RawValue` to `Bytes`
- adds a new `X-Auction-Id` header which is important for another
optimization but that has to be merged before said optimization
- moved original serialization from the executor thread to a background
task that's intended for blocking operations since serialization takes
quite a bit of time
## How to test
existing e2e tests
* Only stream 1 `/solve` request body in driver (#4160)
# Description
Because the driver serves multiple solvers it receives a bunch of
duplicated `/solve` requests. There is already logic to deduplicate the
pre-processing but we there is still one part left that's done
unnecessarily often: streaming the HTTP body.
Streaming the http body currently takes up to 700ms which is
surprisingly slow considering that the HTTP request goes from one k8s
pod to another and not via the public internet.
I suspect the problem is that we are actually streaming ~10MB `/solve`
requests 23 times in parallel (numbers from mainnet).
https://github.com/cowprotocol/services/pull/4159 introduced a new
header (`X-Auction-Id`) that can be used to detect which auction a
request is related to without having to stream the entire body.
With this change everything but prioritizing (i.e. sorting and
allocating balances for orders) and the serialization of the driver's
`/solve` request will be de-duplicated. That means adding more solvers
to the driver will be less costly.
If we consider enforcing the same prioritization logic for ALL solvers
that could also be de-duplicated leading to more or less 0 overhead for
adding more solvers to the same driver.
# Changes
- inspect `X-Auction-Id` header to figure out whether we have to process
the request or just await an existing pre-processing task
Note that this change must be released AFTER
https://github.com/cowprotocol/services/pull/4159`. The reason is that
k8s first rolls out `driver` pods so there would be a period where the
old `autopilot` is still sending requests without the `X-Auction-Id`
header.
## How to test
e2e tests
---------
Co-authored-by: ilya
* Add more tracing spans (#4162)
# Description
This PR just adds more tracing spans to further improve our coverage
with tempo.
Mostly focuses on the autopilot: building new auction, indexing events,
winner selection
* [TRIVIAL] Fix granular autopilot sync (#4165)
# Description
https://github.com/cowprotocol/services/pull/4144 introduced more
granular sync mechanisms for the autopilot run loop.
In a commit addressing some comments an error must have sneaked which
causes the autopilot run loop to wait for fully processed blocks and the
`/settle` detection to wait for partially indexed blocks - the exact
opposite.
This causes us to wait a lot longer than necessary before building a new
auction.
Also our metrics still suggest that the run loop was 1 block longer than
it actually was.
* Upgrade axum 0.6 → 0.8 and related HTTP dependencies (#4164)
# Description
Upgrade the HTTP dependency stack:
- axum: 0.6 → 0.8
- hyper: 0.14 → 1
- http-body: 0.4 → 1
- tower: 0.4 → 0.5
- tower-http: 0.4 → 0.6
- reqwest: 0.11 → 0.12 (version 0.13 changes the default TLS stack so it
will be further upgraded separately)
# Changes
- [ ] Replace axum::Server with tokio::net::TcpListener + axum::serve
- [ ] Update route parameter syntax from :param to {param}
- [ ] Remove body generic from middleware Next type
- [ ] Replace hyper::body::to_bytes with axum::body::to_bytes
- [ ] Replace hyper::StatusCode with axum::http::StatusCode throughout
- [ ] Update return types from hyper::Error to std::io::Error
- [ ] Replace HttpBody trait usage with axum::body::to_bytes helper
- [ ] Remove now-unused direct hyper/http-body deps from crates
- [ ] Convert Mock solver Default impl to async new() since
TcpListener::bind is async
## How to test
Staging
* Orderbook native price estimators fallback (#4161)
# Background
The orderbook's native price estimator is currently configured to use a
Forwarder estimator, which is basically the Autopilot's API. In case
Autopilot is down, quote competition can't proceed without native
prices, and no new orders can be placed during that time.
# Description
Adds an optional fallback native price estimator that kicks in when the
primary estimator experiences sustained failures. This protects native
price availability during primary estimator outages.
The fallback estimator tracks consecutive `ProtocolInternal` errors from
the primary. After a configurable threshold (3 errors), it switches to
the fallback estimator and periodically probes the primary to detect
recovery.
# Changes
- New `FallbackNativePriceEstimator`, which wraps a primary and fallback
estimator with automatic failover logic:
- Tracks consecutive `ProtocolInternal` errors on the primary
- Switches to fallback after 3 consecutive errors
- Probes primary every 60s while in fallback mode
- Recovers to primary when a probe succeeds, otherwise, continue using
the fallback
- `Forwarder` error mapping: HTTP send failures now return
`ProtocolInternal` instead of a generic error, so the fallback estimator
can detect them
- New CLI argument `--native-price-estimators-fallback` on the orderbook
to optionally configure fallback estimators
- New factory method `caching_native_price_estimator_from_inner` to
allow injecting a pre-built inner estimator (with fallback wrapping)
into the caching layer
## How to test
New unit and e2e tests.
* Fix limit layer in driver and bump limit to 20Mb (#4170)
# Description
The upgrade to axum 0.8 required an upper bound on loading requests
completely into memory, so I reused the driver's limit. Turns out, the
limit was not correctly applied and the new API forced it.
This PR fixes the layer to work correctly and bumps the max request body
size to 20MB
# Changes
- [ ] Fix the limit layer
- [ ] Bump the default limit to 20MB
## How to test
Staging
* Remove request body limit in the driver (#4171)
# Description
20Mb was not enough, this PR removes the limit.
# Changes
- [ ] Remove the limit layer
## How to test
Staging
* [TRIVIAL] Bump alloy to 1.7.3 (#4168)
# Description
While looking into the dependencies I noticed our alloy version is a bit
behind, this PR updates it.
I've reviewed the changelog and there does not seem to be anything that
will surprise us. It brings the bonus of some preparations being made
for the glamsterdam network upgrade.
# Changes
- [ ] Alloy version bump to 1.7.3
## How to test
Compiler + Staging
* [TRIVIAL] Bump opentelemetry->0.31 & tracing-opentelemetry->0.32.1 (#4169)
# Description
One more for the upgrade pile. I'd like to think that this will slightly
improve service health due to some of the points in the changelog —
https://github.com/open-telemetry/opentelemetry-rust/blob/main/opentelemetry-sdk/CHANGELOG.md#0310
> * Fix: Restore true parallel exports in the async-native
BatchSpanProcessor by honoring OTEL_BSP_MAX_CONCURRENT_EXPORTS
(https://github.com/open-telemetry/opentelemetry-rust/pull/3028). A
regression in
https://github.com/open-telemetry/opentelemetry-rust/pull/2685
inadvertently awaited the export() future directly in
opentelemetry-sdk/src/trace/span_processor_with_async_runtime.rs instead
of spawning it on the runtime, forcing all exports to run sequentially.
> * Fix: batch size accounting in BatchSpanProcessor when queue is full
(https://github.com/open-telemetry/opentelemetry-rust/pull/3089).
# Changes
- [ ] Bump opentelemetry-* crates to 0.31
- [ ] Bump tracing-opentelemetry to 0.32.1
## How to test
Compile
* Update old de/serialization errors (#4163)
# Description
The error handling that is being removed was added to avoid breaking any
solver/partner code; the change was upped today (Feb 17th) and the teams
with touch points to the affected parties were notified
* https://nomevlabs.slack.com/archives/C036JAGRQ04/p1770811138347829
* https://nomevlabs.slack.com/archives/C0369B2UF6J/p1770810493856389
This PR "brings back" the newer and more accurate errors, relying on
Axum's default extractor behavior.
# Changes
- [ ] Remove custom deserialization code to provide old error codes
- [ ] Update E2E tests
- [ ] Update orderbook/openapi.yml
## How to test
E2E tests
* Fix tracing spans on solvers (#4173)
# Description
https://github.com/cowprotocol/services/pull/4169 changed the
`set_parent` from silently failing to "returning an error" which I
proceeded to log as error, this is very spammy as it happens on every
HTTP request
Digging further, the issue is that the baseline solver does not set the
"main parent span" which we would like to have; so this PR also
addresses that (still needs to be enabled in infra)
# Changes
- [ ] Fix the log level
- [ ] Add & use tracing arguments in solvers
## How to test
Run a test in staging
Test in base, deployment around 14:52
* Upgrade reqwest to 0.13 (#4172)
# Description
Upgrades reqwest to 0.13 — this carries the change from native-tls to
rustls by default, I tested this out and nothing broke
# Changes
- [ ] Upgrade reqwest to 0.13
## How to test
Tested on base staging, didn't see any issues
* [TRIVIAL] Remove direct dependency on derivative crate (#4174)
# Description
I was reading through the issues when I saw the cargo audit one, even
though we still depend on derivative transitively (thus we can't remove
it from the audit list), getting Claude to remove our direct
dependencies was less than 5 minutes.
# Changes
- [ ] Replace derivative proc-macro usage with manual trait
implementations:
## How to test
Compilation + existing tests
* Update Claude's victoria logs instructions (#4177)
# Description
An update of Claude's instructions after we migrated the logging system.
Also puts the querying behind a wrapper script so you can click "allow
reading logs" once instead of having to approve every single query.
Update your .env.claude from known sources.
* Add extra label to distinguish requests with the same path (#4176)
# Description
The orderbook has some paths that are getting merged in the grafana
metrics, this fixes it by formatting it as "{HTTP Method} {Path}"
# Changes
- [ ] Change the label name / format to "{HTTP Method} {Path}"
## How to test
Staging
* Make sure payload is correctly formatted (#4178)
# Description
Makes sure JSON payload is correctly escaped.
* Bump sqlx to 0.8 and bigdecimal to 0.4 (#4175)
# Description
Since the newer axum landed and its friends are also being upgraded,
upgrading SQLx removes the "this code won't compile in a future version
of Rust warning, solves the cargo-audit part of the issue and even
reduces the size of some structs.
# Changes
- [ ] sqlx 0.7 -> 0.8; add 'derive' feature (required in 0.8 for
#[derive(sqlx::FromRow)] and #[derive(sqlx::Type)])
- [ ] bigdecimal 0.3 -> 0.4 (required by sqlx-postgres 0.8)
- [ ] Remove unfulfilled #[expect(clippy::large_enum_variant)] in
LeaderLockTracker (no longer needed because sqlx 0.8 reduced the type of
the Postgres connection by boxing it)
- [ ] Remove RUSTSEC-2024-0363 audit ignore (fixed by upgrading to sqlx
0.8.1+)
## How to test
Compile + testing in staging
* autopilot: filter `&Order` instead of `Arc` (#4179)
# Description
In https://github.com/cowprotocol/services/pull/4153 I conjectured that
running the filter passes over `Vec>` will likely be as fast
as `Vec<&Order>`. To validate that claim I temporarily deployed this PR
and it did indeed drop the average average time to update solvable
orders by around 30ms. I suspect this is because memory pre-fetching
works better with pure slices of references instead of smart pointers
which may differ in layout depending on the compiled language.
# Changes
- run all functions in solvable orders cache over `Vec<&Order>` instead
of `Vec>`.
## How to test
measured on prod
* Move fee policy configuration from CLI args to config file (#4158)
# Description
Extract FeeFactor from shared::arguments into its own shared::fee_factor
module, adding Serialize/Deserialize support
Requires https://github.com/cowprotocol/infrastructure/pull/4620 to be
merged before
# Changes
- [ ] Move FeePoliciesConfig, FeePolicy, FeePolicyKind,
FeePolicyOrderClass, and UpcomingFeePolicies from autopilot CLI
arguments to autopilot::config::fee_policy as serde-based config structs
- [ ] Read fee_policies_config from the TOML config file (flattened into
Configuration) instead of CLI flags
- [ ] Update all e2e tests to construct fee policy config via
Configuration structs and pass them through the config file
## How to test
E2E + staging
* Remove deny_unknown_fields for the new autopilot config (#4182)
# Description
Having this setting enabled leaves us in a chicken/egg problem where
deploying the services part breaks due to no config, and deploying infra
first breaks because the setting is unknown
The current strategy is:
* Infra first with the old env var set so the old autopilot can still
run
* Autopilot second, which will ignore the env var and work with the
config
# Changes
- [ ] Remove deny_unknown_fields from the autopilot config
## How to test
Next migration we'll find out if this truly works
---------
Co-authored-by: Marcin Szymczak
* Revise pull request template format (#4183)
Updated the pull request template to use bullet points for changes.
# Description
The `Changes` section contains a list of changes, not a list of checks
that require a checkbox.
Latest example: https://github.com/cowprotocol/services/pull/4182
# Changes
* changes section in template is now bullet points and not checkboxes
* Migrate trusted tokens to the config (#4189)
# Description
Migrates the trusted tokens to the main config. I've grouped to be
easier to read/find in config files
# Changes
* Removes the trusted tokens from the CliArgs
* Adds them to the new config file
## How to test
Staging
* Optimize uni v3 liquidity fetching (#4188)
# Description
The majority of time fetching uni v3 liquidity is spent cloning pool
states.
This makes up 3.6% of the entire CPU time of the driver.
# Changes
This PR applies 2 optimizations:
* reuse existing allocation with `into_iter().filter().collect()`
* store `PoolInfo` in `Arc`s for cheap clones
I'd like to highlight the use of `Arc::make_mut`. If there is no `Arc`
pointing to the same allocation as our `Arc` we can simply get a mutable
reference. If there are other `Arc`s pointing to our allocation we deep
clone it and point our `Arc` to the new allocation (clone on write).
This is quite cool because together with the fact that `append_events`
takes an exclusive reference to the `pools` we know that there can be no
new `Arc` pointing to a recently updated `PoolInfo` before the function
is over. This ensures that every `PoolInfo` that needs to be updated
will always be cloned at most once.
## How to test
Briefly tested in prod
This yielded surprising results. The amount of time spent inside the uni
v3 liquidity fetching logic remained unchanged and even the time used
for allocations was pretty much unchanged.
But since the cloning of the data was moved to when it gets updated
instead of every time it's needed for a request the time needed to fetch
all the liquidity improved significantly. (still nothing to write home
about, though)
Also some other CPU bound pre-processing tasks got faster as well:
* Compress S3 body in blocking task (#4185)
# Description
Serializing the auction and compressing the bytes is CPU bound work and
takes quite long.
That stuff should be spawned on a block_task to not hog one of the
regular tokio runtime threads and cause spikes in tail latency.
# Changes
* spawn blocking task for serializing and compression s3 upload
* Speedup event indexing (#4180)
# Description
Currently the event indexing logic is dominated by 2 calls:
* eth_getBlock
* eth_getLogs (events of fetched block)
This PR eliminates `eth_getLogs` calls.
Since the rest of the indexing logic is not dominated by `eth_getLogs` I
think the only way how we could meaningfully speed up the process
further is by subscribing to log filters and streaming the results as
soon as a new block was processed by the ethereum node.
# Changes
Since we already have a component that keeps track of the latest block I
created a new type that implements `BlockRetrieving` that simply
forwards `get_current_block()` calls to the block stream instead of
sending an RPC request.
Also adds a few tracing spans and replaces the awkward request batching
logic of the event handler with something easier to read.
## How to test
tested on staging mainnet (indexing overhead should be identical to
prod)
the time the autopilot waits for essential processing to be done
decreased from ~65ms to ~45ms
* Upgrade prometheus to 0.14 (#4193)
# Description
Upgrades prometheus to 0.14 & the metrics macro to 0.6
Closes https://github.com/cowprotocol/services/issues/3338
# Changes
* Upgrades prometheus to 0.14 & the metrics macro to 0.6
* Changes some callsites to match the new with_label_values signatures
## How to test
Staging
* Fix order of tokens to improve caching (#4197)
# Description
When investigating CoinGecko usage I noticed our nginx cache is not
being optimally used, it is in fact used very little. The cache can only
trigger when the URL is the same. There are two issues: the batches have
different compositions and the tokens are not in deterministic order.
This PR fixes the second problem.
* Bulk insert order events query (#4184)
# Description
Because the insert order_events query tries to avoid duplicating the
last event entry it's quite awkward. That's probably why we didn't
replace it with a bulk request earlier. However, flamegraphs showed that
we spend a ridiculous 49% of our CPU time on inserting orders.
# Changes
Implemented awkward bulk insert query
## How to test
single insert variant was already tested before
1 new unit test for multi insert variant
Reduced CPU usage: **0.55 cores -> 0.2 cores**
Faster at handling other CPU bound work
Total time spent on that query: **49% -> 3%**
* Avoid unnecessary overhead from logging (#4191)
# Description
To my surprise do `tracing` macros not lazily evaluate expressions. So
in following code:
```rust
tracing::trace!(
path = &url.path(),
body = %payload.body_to_string(),
"solver request",
);
```
`payload.body_to_string()` always gets evaluated but the `Display`
implementation of the resulting `String` gets called only when the log
is enabled.
This leads to the autopilot currently spending ~2% of the time in
`body_to_string()`.
To address this I introduced the `Lazy` type that delays the execution
of the passed in expression to when the `tracing` machinery actually
executed the `Display` or `Debug` functionality.
Additionally flamegraphs showed that the driver is currently burning
2.2% of its CPU time on logging auction deadlines. I downgraded that log
to `trace` since it's not really that useful.
# Changes
used `Lazy` in the autopilot
downgraded expensive log to `trace`
# Test
Manually tested that `body_to_string()` does not get called by injecting
a `panic!()` without causing tests to fail
added unit tests for `Lazy` in `observe` crate
* Migrate banned users, order events cleanup, and S3 config to config file (#4192)
# Description
Move banned_users, order_events_cleanup_interval/threshold, and S3
upload settings from CLI arguments to the TOML config file.
# Changes
- Add config modules: banned_users, order_events_cleanup, s3
- Remove infra::persistence::cli (S3 CLI args)
- Delete corresponding CLI arguments and Display impl entries
- Wire config values through run.rs
## How to test
Staging
Co-authored-by: Claude Opus 4.6
* Serialize auction in blocking task (#4186)
# Description
The task that writes the current auction to the DB has 2 performance
issues:
* unnecessary conversions: instead of serializing the DTO to a JSON
string we convert it to `JsonValue` and let `sqlx` do the conversion to
string
* conversions on wrong task: serializing data is very slow and blocks an
entire runtime thread if we don't do the sync work in a blocking task
(the entire process often takes more than 1s)
# Changes
* skip 1 conversion by directly serializing the DTO to string and
writing a string to the DB (same pattern already applied by some other
JSON upload)
* serialize the DTO on a blocking task
## How to test
adjusted existing e2e tests, they show that the serialized data can be
read back into the exact JSON value we serialized in the first place
* Restructure observe crate (#4196)
# Description
Follow up to this
[comment](https://github.com/cowprotocol/services/pull/4191#discussion_r2837775501)
suggesting a different structure for the `observe` crate. This PR goes a
bit further than the comment suggested but I think this setup makes the
most sense.
# Changes
old structure:
```
distributed_tracing
- request_id.rs
- trace_id_format.rs
- tracing_axum.rs
lazy.rs
tracing.rs
tracing_reload_handler.rs
```
new structure:
```
tracing
- distributed
- axum.rs
- headers.rs
- request_id.rs
- trace_id_format.rs
- lazy.rs
- init.rs
- reload_handler.rs
```
* Remove backported header injector & extractor (#4200)
# Description
The removed structs + impls were here because of incompatibility issues.
We've since fixed them, it's time to remove them 🗑️
# Changes
* Add opentelemetry-http dep
* Remove the HeaderInjector + HeaderExtractor
## How to test
Staging but this should be basically 1:1
* Improve CoinGecko batching mechanism (#4202)
# Description
`estimate_prices_and_update_cache` iterates all tracked tokens, most of
which are cache hits that resolve instantly. With .buffered() a pending
cache miss at the front blocks yielding ready results behind it, keeping
all remaining slots occupied and preventing new futures from entering
the stream. This means expired tokens trickle into BufferedRequest too
slowly producing batches of 2-3 tokens instead of the max 20.
https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=63d75fe56901ecfe850ec03875615596
demonstrates this.
* [TRIVIAL] Remove noisy tracing spans (#4203)
# Description
This function gets called hundreds of times within one span leading to a
tempo view that scrolls many pages which makes it hard to get the big
picture of the call.
The caller of the noisy call is also instrumented and measures the
execution time of all sub calls together so we'll not lose much
information.
# Changes
remove instrumentation of frequently called function
* Autopilot measure network transfer (#4204)
# Description
Some solvers reported that `/solve` requests arrive with varying delays.
It's quite hard to pin point where the issues lies. While some
improvements on the autopilot definitely reduced the variance of the
delay greatly there are still new reports about this.
In order to get more data on this (especially from solvers NOT using the
CoW hosted reference driver) this PR tries to approximate the data
transfer times from the autopilot side.
This is accomplished by writing a slim wrapper around the fully
serialized payload `Bytes` that turns it into a stream. That way we can
at least measure the time it takes `hyper` to write the bytes to the
network stack. Since the consumer (external driver) will have
back-pressure on the transfer this measurement should come reasonably
close to the actual data transfer times.
# Changes
- added `BytesStream` that yields `Bytes` in 1MB chunks
- also measures time to start the transfer and the entire transfer time
- logs the result using the original tracing span (which now contains
the auction_id, and driver)
## How to test
added unit test for correctness of the yielded data
ran in e2e test to confirm the logs contain the expected spans
---------
Co-authored-by: José Duarte
* Only check allowance of liquidity sources that are actually used (#4190)
# Description
Currently a lot of CPU time (~3.5%) is spent on fetching allowances for
the liquidity sources we index. This is problematic for 2 reasons:
* most liquidity sources are not used so fetching the settlement
contract's allowance is wasted time
* the driver seems to not use the fetched allowance and fetches them
again when encoding the tx (see
[1](https://github.com/cowprotocol/services/blob/main/crates/driver/src/domain/competition/solution/encoding.rs#L175),
[2](https://github.com/cowprotocol/services/blob/main/crates/driver/src/domain/competition/solution/mod.rs#L294-L299),
[3](https://github.com/cowprotocol/services/blob/main/crates/driver/src/domain/competition/solution/mod.rs#L427),
[4](https://github.com/cowprotocol/services/blob/main/crates/driver/src/domain/competition/solution/interaction.rs#L33-L62))
# Changes
deleted `solver::interactions::allowances` and it's usages
## How to test
e2e tests still work
* Migrate autopilot native price estimation config from CLI args to config file (#4194)
# Description
Move native price estimator settings (estimators, api_estimators,
results_required, cache_refresh_interval, native_price_prefetch_time)
from CLI arguments to the TOML config file.
# Changes
* Move the autopilot native price estimator settings
* Add tests
# Migration Guide
Autopilot native price estimator CLI arguments have been moved to the
TOML config file under the `[native-price-estimation]` table.
## Estimator format
Previously, estimator variants were specified as `|`-separated strings.
Now they are inline tables with a `type` field:
| Old (CLI) | New (TOML) |
|---|---|
| `CoinGecko` | `{ type = "CoinGecko" }` |
| `OneInchSpotPriceApi` | `{ type = "OneInchSpotPriceApi" }` |
| `Driver\|solver1\|http://localhost:8080` | `{ type = "Driver", name =
"solver1", url = "http://localhost:8080" }` |
| `Forwarder\|http://localhost:12088` | `{ type = "Forwarder", url =
"http://localhost:12088" }` |
Stages (previously separated by `;`) become separate inner arrays.
Estimators within a stage (previously separated by `,`) are elements of
the same inner array.
**Old (CLI):**
```
CoinGecko,OneInchSpotPriceApi;Driver|solver1|http://localhost:8080;Forwarder|http://localhost:12088
```
**New (TOML):**
```toml
[native-price-estimation]
estimators = [
[{ type = "CoinGecko" }, { type = "OneInchSpotPriceApi" }],
[{ type = "Driver", name = "solver1", url = "http://localhost:8080" }],
[{ type = "Forwarder", url = "http://localhost:12088" }],
]
```
## Arguments
- `--native-price-estimators` (CLI) / `NATIVE_PRICE_ESTIMATORS` (env):
```toml
[native-price-estimation]
estimators = []
```
- `--api-native-price-estimators` (CLI) / `API_NATIVE_PRICE_ESTIMATORS`
(env):
```toml
[native-price-estimation]
api-estimators = []
```
- `--native-price-estimation-results-required` (CLI) /
`NATIVE_PRICE_ESTIMATION_RESULTS_REQUIRED` (env):
```toml
[native-price-estimation]
results-required = 2
```
- `--native-price-cache-refresh` (CLI) / `NATIVE_PRICE_CACHE_REFRESH`
(env):
```toml
[native-price-estimation]
cache-refresh-interval = "1s"
```
- `--native-price-prefetch-time` (CLI) / `NATIVE_PRICE_PREFETCH_TIME`
(env):
```toml
[native-price-estimation]
prefetch-time = "80s"
```
## How to test
Staging
---------
Co-authored-by: Claude Opus 4.6
* [TRIVIAL] Change gzip level to 3 (#4209)
# Description
gzip is super heavy on the CPU and currently we are compressing data
with the maximum level. However, gzip quickly reaches a level of
diminishing returns so this PR picks a more reasonable gzip compression
level based on a test.
```
Level 1: 2214921 bytes (62ms)
Level 2: 2179485 bytes (62ms)
Level 3: 2149025 bytes (65ms)
Level 4: 1981237 bytes (116ms)
Level 5: 1927338 bytes (133ms)
Level 6: 1883464 bytes (145ms)
Level 7: 1864462 bytes (159ms)
Level 8: 1844328 bytes (225ms)
Level 9: 1840352 bytes (301ms)
```
I picked a recently uploaded auction instance (~11MB) and compressed it
once with each level. This showed that level 3 cuts the runtime by ~80%
while degrading the compressed size by only 15% (from 1.84MB to 2.14MB).
This caused other blocking operations in the autopilot to run faster
(e.g. request serialization goes from ~90ms to ~70ms).
# Changes
Reduced gzip compression level from max (i.e. 9) to 3.
* Move orderbook configuration from CLI args to TOML config file (#4195)
# Description
Migrate order validation, IPFS, volume fee, and misc orderbook settings
(unsupported tokens, banned users, EIP-1271 validation, gas limits,
same-tokens policy, etc.) from clap CLI arguments to a TOML
configuration file.
# Changes
* Migrates the parameters above
* Groups IPFS, order validation and volume fee
* Refactors where applicable
* Adds unit tests for (de)serialization
# Orderbook Configuration Migration: CLI to TOML
# Migration Guide
The orderbook no longer accepts certain settings as CLI arguments. They
must now be provided in a TOML config file, passed via the new
**required** `--config` flag.
```bash
orderbook --config=/path/to/orderbook.toml ...
```
## Migrated settings
| Old CLI Argument | TOML Key |
|---|---|
| `--min-order-validity-period` |
`order-validation.min-order-validity-period` |
| `--max-order-validity-period` |
`order-validation.max-order-validity-period` |
| `--max-limit-order-validity-period` |
`order-validation.max-limit-order-validity-period` |
| `--max-limit-orders-per-user` |
`order-validation.max-limit-orders-per-user` |
| `--max-gas-per-order` | `order-validation.max-gas-per-order` |
| `--same-tokens-policy` | `order-validation.same-tokens-policy` |
| `--unsupported-tokens` | `unsupported-tokens` |
| `--banned-users` | `banned-users.addresses` |
| `--banned-users-max-cache-size` | `banned-users.max-cache-size` |
| `--eip1271-skip-creation-validation` |
`eip1271-skip-creation-validation` |
| `--ipfs-gateway` | `ipfs.gateway` |
| `--ipfs-pinata-auth` | `ipfs.auth-token` |
| `--app-data-size-limit` | `app-data-size-limit` |
| `--active-order-competition-threshold` |
`active-order-competition-threshold` |
| `--volume-fee-factor` | `volume-fee.factor` |
| `--volume-fee-effective-timestamp` |
`volume-fee.effective-from-timestamp` |
## Example
Before:
```bash
orderbook \
--min-order-validity-period=2m \
--max-order-validity-period=6h \
--banned-users=0xdead000000000000000000000000000000000000 \
--ipfs-gateway=https://gateway.pinata.cloud/ipfs/ \
--ipfs-pinata-auth=my-secret-key \
--volume-fee-factor=0.0002 \
--volume-fee-effective-timestamp=2025-06-01T00:00:00Z \
--same-tokens-policy=allow-sell \
--bind-address=0.0.0.0:8080
```
After — create `orderbook.toml`:
```toml
same-tokens-policy = "allow-sell"
[order-validation]
min-order-validity-period = "2m"
max-order-validity-period = "6h"
[banned-users]
addresses = ["0xdead000000000000000000000000000000000000"]
[ipfs]
gateway = "https://gateway.pinata.cloud/ipfs/"
pinata-auth = "my-secret-key"
[volume-fee]
factor = 0.0002
effective-from-timestamp = "2025-06-01T00:00:00Z"
```
## How to test
Tests + Staging
---------
Co-authored-by: Claude Opus 4.6
* [M3] docs(playground): add Using Otterscan user guide (#4146)
## Summary
This PR completes **Milestone 3: Documentation** of the [CoW Grants
Program RFP: CoW Protocol Playground Block Explorer
Integration](https://forum.cow.fi/t/grant-application-cow-protocol-playground-block-explorer-integration/3284/1)
proposal by CoBuilders.
### Documentation Strategy
Most of the technical documentation for this integration was delivered
inline with the implementation in M1 and M2:
| Milestone | Documentation Delivered |
|-----------|------------------------|
| **M1** ([#4000](https://github.com/cowprotocol/services/pull/4000)) |
README sections for Sourcify configuration, contract verification,
component table updates |
| **M2** ([#4077](https://github.com/cowprotocol/services/pull/4077),
[cowswap#6774](https://github.com/cowprotocol/cowswap/pull/6774)) |
Environment variable documentation in `.env` files, JSDoc comments in
source code |
**This PR** adds the remaining user-facing documentation: a practical
guide on how to use Otterscan for transaction inspection and debugging.
## Changes
Adds a "Using Otterscan" section to the playground README covering:
- How to access and use Otterscan (`http://localhost:8003`)
- Inspecting transactions (overview, traces, logs, gas profiling)
- Debugging failed transactions with trace analysis
- Example workflow: Tracing a CoW Swap settlement
## Milestones
| Milestone | Description | Status |
|-----------|-------------|--------|
| M1 | Otterscan Integration |
[#4000](https://github.com/cowprotocol/services/pull/4000) ✅ |
| M2 | Frontend Integration |
[#4077](https://github.com/cowprotocol/services/pull/4077) +
[cowswap#6774](https://github.com/cowprotocol/cowswap/pull/6774) ✅ |
| M3 | Documentation | **This PR** |
---
*Submitted by [CoBuilders](https://cobuilders.xyz) as part of the CoW
Grants Program*
---------
Co-authored-by: Augusto Collerone
Co-authored-by: Ignacio
* Add v1/orders POST endpoint to get orders in batches (#4048)
# Description
Aave wants to track specific orders in bulk, knowing their ids.
# Changes
Adds POST handler for `v1/orders/lookup` endpoint that requires a list
of order uids and responds with a vector of their data. Has a hardcoded
limit of 128 orders per request (to fit the MAX_JSON_BODY_PAYLOAD size).
## How to test
Test on staging, query multiple orders using this API.
---------
Co-authored-by: José Duarte
Co-authored-by: Martin Magnus
Co-authored-by: ilya
* Migrate the playground config (#4214)
# Description
The playground was left behind amidst the config changes. This PR brings
the playground back up to speed.
# Changes
* Remove unused variables
* Migrate the orderbook migration
* Migrate the autopilot migration
## How to test
Run the playground and execute a trade
* Compile only used packages in main Dockerfile (#4220)
# Description
The Dockerfile was compiling the whole workspace which is wasteful for
deployment (it was compiling e2e for example). This PR only compiles the
used packages.
# Changes
* Compiling workspace -> autopilot, driver, orderbook, refunder, solvers
only
## How to test
Build the dockerfile
* Replace full alloy import with specific alloy crates (#4219)
# Description
Based on @MartinquaXD's comment on Slack, I figured that there would be
places where we can import the specific alloy crate, unlocking earlier
and more parallel compilation. These changes alone seem to save ~5s on a
clean build in my laptop; going down from ~1m to 55s.
There's more gains to take from this, but for that we need to separate
shared further and then split those dependencies.
https://github.com/cowprotocol/services/pull/4217 would also help a
bunch.
# Changes
* app-data
* replace alloy with alloy-primitives
* since alloy uses tiny-keccak, replace the tiny-keccak with alloy's
keccak
* chain
* manually implement thiserror (less 1 dep)
* replace alloy with alloy-primitives
* model
* replace alloy with alloy-primives, alloy-signer, alloy-signer-local,
alloy-sol-types
* number
* replace alloy with alloy-primitives
* order-validation
* replace alloy with alloy-primitives and alloy-contract
* remove thiserror wrapper (less 1 dep)
* serde-ext
* replace alloy with alloy-primitives
* testlib
* replace alloy with alloy-primitives
* winner-selection
* replace alloy with alloy-primitives
## How to test
Compiler + existing tests
* Enhance error handling and reporting for app data deserialization (#4213)
# Description
When users provide app data with wrong partner fees, we get less than
good error reporting, for example:
```
{"errorType":"AppDataInvalid","description":"app data has the wrong format: data did not match any variant of untagged enum Helper at line 1 column 232"}
```
This is, not only a pain for us to debug but also for the user:
* For us because the special deserializers are all named Helper
* For the user because of the bad error message
This PR changes the deserialization mechanism in a "non-obvious" way to
provide proper error messages, as untagged enums stand very much against
them.
For example floating point bps are unsupported, they returned the
previous error; after this PR they return:
```
{"errorType":"AppDataInvalid","description":"app data has the wrong format: invalid type: floating point `99.0`, expected u64 at line 1 column 128"}
```
# Changes
* Rename the deserializers
* Refactor the deserializers into weird structs (but better for error
reporting)
## How to test
Unit tests to ensure nothing broke + playground to test the error
```
curl 'http://localhost:8000/api/v1/app_data \
-X 'PUT' \
-H 'accept: application/json' \
-H 'content-type: application/json' \
--data-raw '{"fullAppData":"{\"appCode\":\"YOUR_APP_CODE\",\"metadata\":{\"partnerFee\":[{\"recipient\":\"0x28c716bC23ed77CAEc27f476A366318ad5F12d58\",\"volumeBps\":99.5},{\"priceImprovementBps\":9900,\"recipient\":\"0x28c716bC23ed77CAEc27f476A366318ad5F12d58\",\"volumeBps\":100}]},\"version\":\"1.14.0\"}"}'
```
* Optimize batching for CoinGecko (#4215)
# Description
I have run a bunch of experiment goal of which was to make CoinGecko
batches bigger (fetch price for more tokens at once) to save on costs.
In a previous experiment I increased `concurrent_requests` on the
`CachingNativePriceEstimator` to 500 and that totally worked and
CoinGecko debounces all these requests nicely, but also means we would
be spamming solvers with a lot of requests at once when we start the
service.
The first issue at hand is that before this PR we would create futures
that would hit the cache and return immediately, which was bad, because
they take up a slot in the queue when using buffered() so fewer useful
futures that actually issue a native price request would get to run. I
changed this to buffered_unordered() and that helped a little bit, but
then the queue gets full and after that new futures get in only as
previous futures finishe, so the execution is spread out in time and our
CoinGecko debouncing can't gather enough tokens to form a full batch.
This PR introduces a solution where we omit non-expired tokens
altogether which solves the issue of futures that hit the cache taking
up a spot in the queue _and_ we just run batches of 19 sequentially. We
wait for each batch to finish (max ~3s, limited by QUERY_TIMEOUT) and
only then issues a new batch. As a tradeoff we get a slower cache warm
up/refresh, but we get to save a lot of money on CoinGecko.
In addition to this change I set the refresh rate to 30s from 1s, so we
can gather more expired tokens at once.
# Changes
* [x] Don't try to fetch non-expired prices
* [x] Run batches sequentially
* [x] NATIVE_PRICE_CACHE_REFRESH set to 30s instead of 1s in service
config
---------
Co-authored-by: Martin Magnus
* Compress `/solve` requests (#4212)
# Description
Our current `/solve` request can be heavy on certain chains, and given
the fact that it is expected to eventually switch to a cross-chain
auction, the data will be growing significantly. While it is expected to
implement a delta-sync approach with event-based auction updates, this
is quite involved, and as a first step, we can look into compressing the
request to reduce its size and reduce network latency/delays.
The tests showed that `brotli` with compression level 1 outperforms
`gzip`
https://github.com/cowprotocol/services/pull/4212#discussion_r2857437463
# Changes
##Autopilot
- New `--compress-solve-request` boolean CLI flag threaded through
`run_loop::Config`
- `solve::Request` gains a `compressed()` method that br-compresses the
body on a blocking task (CPU-intensive, like the existing serialization)
- On compression failure, falls back to sending the uncompressed body
with an error log
- Compression time is tracked via the existing `auction_overhead` metric
- Sets the `Content-Encoding: br` header only when the body is actually
compressed
- Add a `runloop_solve_request_body_size` histogram metric that records
the size (in bytes) of the JSON body sent in each `/solve` request to
drivers.
## Driver
- Adds `RequestDecompressionLayer` to the axum middleware stack, which
automatically decompresses br-encoded request bodies based on the
`Content-Encoding` header
## How to test
New unit and e2e tests. Deploy manually with disabled compression to
collect some metrics and then with compression enabled.
## Related issues
Fixes #4206
* split off new crates from `shared` (#4223)
# Description
`shared` is a big ball of spaghetti where dependencies are extremely
unclear.
This PR untangles this somewhat
# Changes
- moves some code out of shared to the only location where it's used
- `trace_many` into `bad_token::trace_call`
- `CodeFetching` into `trade_verifier`
- `BlockRetrieving` into `event-indexing`
- `tenderly_api` into `trade_verifier`
- `subgraph` into `sources`
- `RecentBlockCache` into `sources`
- create separate crates for `balance-overrides`, `event-indexing`,
`account-balances`, `request-sharing`, `token-info`, `liquidity-sources`
- moved `BaseTokens` and `BaselineSolvable` into `liquidity-sources` as
that made the most sense to me
Some of the new crates are super tiny but are necessary to later move
`price-estimation` into a separate crate as well.
This already cut the compilation time of `shard` in half which are gains
we'll often see in incremental builds
## How to test
compiler
* Allow multiple parallel settlements from one solver (#4167)
# Description
Resolves https://github.com/cowprotocol/services/issues/3966.
Enable parallel settlement submission from a single solver by using
EIP-7702 delegation. When a solver wins multiple solutions in
overlapping auctions, each settlement can now be submitted concurrently
through independent submission EOAs instead of waiting in a sequential
queue.
The solver EOA delegates its code to a CowSettlementForwarder contract
via EIP-7702. Approved submission EOAs call forward(target, data) on the
solver EOA, which forwards to the actual target (settlement contract,
wrapper, or flashloan router) with msg.sender = solver EOA — preserving
the existing whitelisting.
# Changes
- [x] `CowSettlementForwarder.sol` — New forwarder contract with caller
whitelist. Supports forwarding to any target (settlement contract,
wrappers, flashloan router) via `forward(address target, bytes data)`
- [x] `SubmissionAccountPool` type: a channel-based pool that lends
submission accounts for the duration of a settlement and reclaims them
afterward. In EIP-7702 mode, settle requests are spawned as concurrent
tasks instead of processed sequentially
- [x] `submission_accounts` config that allows specifying accounts that
are whitelisted to submit settlements. If omitted we fallback to
non-delegated submissions directly from the solver EOA
# Requirements before deployment
* Deploy & verify the CowSettlementForwarder contract
* Set up EIP7022 delegation to whitelisted solver EOAs to the newly
deployed contract
* Create new submissions accounts and fund them with eth (or other base
token) & monitor their eth balance
* Whitelist the submissions accounts on the solver EOA
(CowSettlementForwarder code)
Only then can the submissions accounts be configured and deployed.
## How to test
cargo nextest run -p e2e local_node_parallel_settlement --test-threads 1
--run-ignored ignored-only
* Move price estimation into separate crate (#4225)
# Description
Further untangles the `shared` crate.
# Changes
* deletes `bytes.rs` which was forgotten in an old PR
* moved `trade_finding` into `price-estimation`
* move `tenderly_api` arguments from `shared::Arguments` to
`price_estimation::Arguments`
* removed a few dependencies
* downgraded a few dependencies to `dev-dependencies`
new crates split off of `shared`:
* `gas-price-estimation`
* `price-estimation`
* `bad-tokens`
Unfortunately `price-estimation` is relying on a few utils which didn't
make much sense to move into a new crate so I duplicated a few things in
`price_estimation::utils` but I think this does not outweigh the
structure and compile time gained by this PR.
This PR does again not migrate the catch all `alloy` imports to the more
specific sub-crates (e.g. `alloy_primitives`)
## How to test
compiler
* Migrate shared native price estimation config from CLI to config file (#4216)
# Description
Move native price cache, concurrent requests, approximation tokens, and
balancer SOR URL settings from CLI arguments into the TOML config file.
Introduce a shared NativePriceConfig in the shared crate that both
autopilot and orderbook embed via serde flatten. Also migrate
orderbook's native price estimator selection and results_required from
CLI to config.
# Changes
* Moves shared native price settings (cache max-age, concurrent
requests, approximation tokens) into a new
`shared::price_estimation::config::native_price` module, used by both
autopilot and orderbook via `#[serde(flatten)]`
* Moves orderbook-specific settings (native price estimators, fallback
estimators, results-required) from CLI args to the orderbook TOML config
* Removes `--balancer-sor-url` (unused)
* Adds unit tests for (de)serialization of the new config structs
## Migrated settings
### Shared (autopilot + orderbook)
These settings were in `shared::price_estimation::Arguments` (CLI) and
now live in the `[native-price-estimation]` section of each service's
TOML config, flattened from the shared `NativePriceConfig`.
| Old CLI Argument | TOML Key |
|---|---|
| `--native-price-cache-max-age` |
`native-price-estimation.cache.max-age` |
| `--native-price-cache-concurrent-requests` |
`native-price-estimation.cache.concurrent-requests` |
| `--native-price-approximation-tokens` |
`native-price-estimation.approximation-tokens` |
| `--balancer-sor-url` | **removed** |
### Orderbook-only
These settings were in `orderbook::arguments::Arguments` (CLI) and now
live in the `[native-price-estimation]` section of the orderbook TOML
config.
| Old CLI Argument | TOML Key |
|---|---|
| `--native-price-estimators` | `native-price-estimation.estimators` |
| `--native-price-estimators-fallback` |
`native-price-estimation.fallback-estimators` |
| `--fast-price-estimation-results-required` |
`native-price-estimation.results-required` |
## Example
### Orderbook
Before:
```bash
orderbook \
--native-price-cache-max-age=5m \
--native-price-cache-concurrent-requests=4 \
--native-price-approximation-tokens="0xaaa...111|0xbbb...222,0xccc...333|0xddd...444" \
--native-price-estimators="[[{type = \"CoinGecko\"}, {type = \"OneInchSpotPriceApi\"}]]" \
--native-price-estimators-fallback="[[{type = \"CoinGecko\"}]]" \
--fast-price-estimation-results-required=3 \
--config=/path/to/orderbook.toml \
--bind-address=0.0.0.0:8080
```
After — add to `orderbook.toml`:
```toml
[native-price-estimation]
estimators = [[{ type = "CoinGecko" }, { type = "OneInchSpotPriceApi" }]]
fallback-estimators = [[{ type = "CoinGecko" }]]
results-required = 3
approximation-tokens = [
["0xaaa...111", "0xbbb...222"],
["0xccc...333", "0xddd...444"],
]
[native-price-estimation.cache]
max-age = "5m"
concurrent-requests = 4
```
### Autopilot
Before:
```bash
autopilot \
--native-price-cache-max-age=10m \
--native-price-cache-concurrent-requests=2 \
--native-price-approximation-tokens="0xaaa...111|0xbbb...222" \
--config=/path/to/autopilot.toml
```
After — add to `autopilot.toml` (inside the existing
`[native-price-estimation]` section):
```toml
[native-price-estimation]
# ... existing autopilot-specific settings (estimators, etc.) ...
approximation-tokens = [
["0xaaa...111", "0xbbb...222"],
]
[native-price-estimation.cache]
max-age = "10m"
concurrent-requests = 2
```
## How to test
Staging
---------
Co-authored-by: Claude Opus 4.6
* Accept hex params with and without 0x prefix (#4228)
# Description
During the Axum migration we (unknowingly) stopped supporting unprefixed
hex values — this was due to Axum using the JSON deserialization (which
for OrderUids for example, was rejecting non-prefixed hex) while warp
used FromStr which had a more lenient implementation.
This PR unifies the FromStr and serde impls and adds tests to the
endpoints to ensure
# Changes
We notified downstream partners but this single path was forgotten in
the respective migration
* Refactor cancel_order handler to use Axum typed extractors
(Path, Json) instead of manual parsing
* Change solver_competition_v2 auction_id to u64 so negative values
return BAD_REQUEST
* Update OrderUid deserialization and FromStr to delegate 0x handling to
const_hex (which strips the prefix internally)
* Add extraction tests across all orderbook API endpoints verifying hex
params (OrderUid, Address, B256, AppDataHash) accept both prefixed and
non-prefixed input
## How to test
Run tests
Co-authored-by: Claude Opus 4.6
* Add TOML formatting support (#4226)
# Description
It's really annoying not to have a standard TOML formatting utility,
without it we'll bikeshed on something generally not worth losing time
over.
This PR addresses that issue by introducing
[Tombi](https://github.com/tombi-toml/tombi) in several forms:
* CLI
* VSCode (extension recommendation to ensure the right extension +
extension config)
* Zed
Note: Tombi also does linting and is aware of the deprecation of
package.authors in Cargo.toml, however, the book doesn't mention much of
an alternative because in reality it's not just the package submitter
etc, see https://github.com/rust-lang/cargo/issues/16458 for more info.
# Changes
* New recipe for the Justfile
* Editor configs
* Add tombi to CI too
* Formatted all *.toml
## How to test
* Test it in your respective editor
* Run `just tombi-fmt` (add `--check` for check)
* Extract `signature-validator` and `zeroex-api` crates (#4224)
# Description
While fixing my config I got Claude to address my own comments on
https://github.com/cowprotocol/services/pull/4223
Move `signature_validator` and `zeroex_api` modules into their own
workspace crates and update all dependents to import from the new
crates. This continues the effort to reduce the `shared` crate's surface
area.
# Changes
* Extract zeroex-api from shared — this one was a freebie and doesn't
make a lot of sense being in shared as it so specific
* Extract signature-validator — this one allows us to compile cow-amm
without shared (see image below)
* Remove thiserror in crates that had errors with a single variant or
similar, in favor of manual implementation
Left is after, right is before
## How to test
Compiler + tests
---------
Co-authored-by: Claude Opus 4.6
Co-authored-by: MartinquaXD
* Increase override amount (#4231)
# Description
We got a report about failing simulations on Polygon. It turns out that
when we put in this change we had 1 ETH in mind which is fine on ETH
chains, but it also translates to 1 POL which is worth about $0.9 and
leads to simulation failures due to insufficient gas.
* replace `alloy` dependencies with specific sub-dependencies (#4230)
# Description
While depending on `alloy` is convenient because it bundles everything
inside 1 dependency it also hides what parts are actually needed and can
delay the compilation of crates unnecessarily.
# Changes
replace `alloy` dependency with the actually used sub-crates like
`alloy-primitives` and `alloy-provider`
this PR mostly focuses on the smaller "leaf" dependency crates as they
are manageable in size and allowing them to compile earlier is more
important than optimizing crates like `driver`, and `autopilot`.
So far this PR only improves the compile time very slightly by making
sure `contracts` does not indirectly depend on `aws-sdk-kms` as that is
insanely slow to compile.
The effects of this change will be more pronounced when we change the
`contracts` crate to be compiled as individual `crates`.
But I think even without huge compile time gains being explicit about
our dependencies still makes sense.
## How to test
compiler
* Migrate the database shared configuration to a file (#4218)
# Description
This PR moves the DB CLI arguments to a configuration file.
Additionally, this PR introduces the configs/ crate to ease mix and
matching parts of the config and to have one more "compilation caching"
place, to reduce the size of the shared crate.
# Changes
* Create configs/ crate
* Migrate & unify the db arguments from shared, orderbook and autopilot
in configs/database
# Migration Guide
Database connection settings move from CLI args to the TOML config file
(`[database]` section) for both autopilot and orderbook.
## CLI args -> TOML
| CLI arg / env var | TOML replacement (`[database]`) |
|---|---|
| `--db-write-url` / `DB_WRITE_URL` | `write-url` |
| `--db-read-url` / `DB_READ_URL` (orderbook) | `read-url` |
| `--db-max-connections` / `DB_MAX_CONNECTIONS` | `max-connections` |
| `--insert-batch-size` / `INSERT_BATCH_SIZE` (autopilot) |
`insert-batch-size` |
Keeping removed args in your startup command will cause an error.
## TOML example
```toml
[database]
write-url = "postgresql://user:password@host:5432/dbname"
read-url = "postgresql://readonly:password@replica:5432/dbname" # orderbook only, optional
max-connections = 10
insert-batch-size = 500 # autopilot only
```
All fields have defaults matching the old CLI defaults (`write-url =
"postgresql://"`, `max-connections = 10`, `insert-batch-size = 500`,
`read-url` falls back to `write-url`). Omitting `[database]` entirely
preserves previous behavior.
## How to test
E2E tests + staging
---------
Co-authored-by: Claude Opus 4.6
* reenable https support (#4238)
# Description
When replacing the `alloy` dependency with its sub-depdencies I let
compilation errors guide me which features need to be enabled. However,
this was not enough since `https` support needs to be enabled via a
feature and if that's missing we'll only encounter runtime errors but
not compile time errors.
`reqwest` will throw errors like `invalid URL, scheme is not http`.
# Changes
Enabled `https` on the workspace level to avoid feature unification
causing us to miss `https` support in future edge cases
Added a unit test to ensure that `https` requests succeed.
## How to test
new unit test
* Fix log instructions for claude (#4237)
# Description
Log format has changed so I updated instructions how to use it for
Claude.
* Dont rely on feature unification (#4240)
# Description
Follow up to #4238.
While that PR correctly identified the issue that `https` was not
enabled when is should have been it did not resolve it correctly. It
incorrectly added the tls feature on the workspace toml assuming this
will cause the feature to always be enabled but that's actually not
correct.
The driver still did not support https. I was able to reproduce that by
copying the new `test_https` unit test to the driver main and running it
from there.
`cargo test -- test_https` passed while `cargo test -p driver --
test_https` did not. This indicates that `https` support was only
enabled when the whole workspace gets compiled as one. When we only
compiled the `driver` feature unification was not there to pull in the
necessary features.
This PR addresses this by explicitly enabling all the necessary features
such that every crate can be compiled and tested individually without
complaints.
# Changes
Add a bunch of features that were previously assumed to not be needed
because feature unification pulled them in without our knowledge.
Since `alloy` likes to follow the pattern of using feature flags to
enable compilation of sub-crates I avoided the use of feature flags by
depending on the underlying sub-crate whenever possible. For example
this caused me to introduce `alloy_rpc_types_eth` and
`alloy_rpc_types_trace` on the workspace level.
This PR only fixes the symptom but doesn't prevent us from relying on
feature unification without our knowledge again. This should be
addressed in a follow up PR.
## How to test
After that was done I repeated the test with `cargo -p driver --
test_https` and it passed. Indicating that the `ethrpc` crate now
correctly causes https to be supported in any crate that depends on it.
* Extract autopilot config groups (ethflow, cow_amm, run_loop) to TOML (#4235)
# Description
Move ethflow, cow_amm, and run_loop configurations from CLI arguments to
dedicated TOML config file modules. Add TestDefault impls for ethflow
and run_loop configs so E2E tests use appropriate values
(skip_event_sync, shorter timeouts) without manual overrides in test
setup code.
# Changes
* Move ethflow to the config
* Move cow_amm to the config
* Move run_loop to the config
* Move other loose arguments to the config
## How to test
Tested in staging
# Migration Guide
The following autopilot CLI arguments have moved to the TOML config
file.
## Ethflow (`[ethflow]`)
| CLI arg / env var | TOML key (`[ethflow]`) |
|---|---|
| `--ethflow-contracts` / `ETHFLOW_CONTRACTS` | `contracts` |
| `--ethflow-indexing-start` / `ETHFLOW_INDEXING_START` |
`indexing-start` |
| `--skip-event-sync` / `SKIP_EVENT_SYNC` | `skip-event-sync` |
## CoW AMM (`[cow-amm]`)
| CLI arg / env var | TOML key (`[cow-amm]`) |
|---|---|
| `--cow-amm-configs` / `COW_AMM_CONFIGS` | `[[cow-amm.contracts]]` (see
below) |
| `--archive-node-url` / `ARCHIVE_NODE_URL` | `archive-node-url` |
The `--cow-amm-configs` pipe-separated format
(`\|\|`) is replaced by TOML tables:
```toml
[cow-amm]
archive-node-url = "https://archive.example.com"
[[cow-amm.contracts]]
factory = "0x..."
helper = "0x..."
index-start = 12345678
```
## Run loop (`[run-loop]`)
| CLI arg / env var | TOML key (`[run-loop]`) |
|---|---|
| `--max-run-loop-delay` / `MAX_RUN_LOOP_DELAY` | `max-delay` |
| `--max-winners-per-auction` / `MAX_WINNERS_PER_AUCTION` |
`max-winners-per-auction` |
| `--max-solutions-per-solver` / `MAX_SOLUTIONS_PER_SOLVER` |
`max-solutions-per-solver` |
| `--enable-leader-lock` / `ENABLE_LEADER_LOCK` | `enable-leader-lock` |
| `--compress-solve-request` / `COMPRESS_SOLVE_REQUEST` |
`compress-solve-request` |
| `--submission-deadline` / `SUBMISSION_DEADLINE` |
`submission-deadline` |
| `--max-settlement-transaction-wait` /
`MAX_SETTLEMENT_TRANSACTION_WAIT` | `max-settlement-transaction-wait` |
| `--solve-deadline` / `SOLVE_DEADLINE` | `solve-deadline` |
## Standalone fields
| CLI arg / env var | TOML key |
|---|---|
| `--metrics-address` / `METRICS_ADDRESS` | `metrics-address` |
| `--api-address` / `API_ADDRESS` | `api-address` |
| `--shadow` / `SHADOW` | `shadow` |
| `--disable-order-balance-filter` / `DISABLE_ORDER_BALANCE_FILTER` |
`disable-order-balance-filter` |
| `--max-maintenance-timeout` / `MAX_MAINTENANCE_TIMEOUT` |
`max-maintenance-timeout` |
| `--run-loop-native-price-timeout` / `RUN_LOOP_NATIVE_PRICE_TIMEOUT` |
`native-price-timeout` |
| `--unsupported-tokens` / `UNSUPPORTED_TOKENS` | `unsupported-tokens` |
| `--min-order-validity-period` / `MIN_ORDER_VALIDITY_PERIOD` |
`min-order-validity-period` |
| `--max-auction-age` / `MAX_AUCTION_AGE` | `max-auction-age` |
All defaults remain unchanged.
* Don't consider inflight orders invalid (#4241)
# Description
When I was working on another feature (the debug endpoint) I noticed
that there is a race condition where we sometimes insert "invalid" order
event to the DB.
From logs
```
09:19:13.717 stored order events label=Executing count=1
09:19:13.733 filtered orders reason=insufficient_balance count=1 orders=[0x060a...]
09:19:13.737 stored order events label=Invalid count=1
09:19:13.756 stored order events label=Traded count=1
```
Order is in `executing` state, then settles onchain. If the indexing
runs now and we set the order to `traded` all is well. However if the in
cache update runs first it's possible the wallet no longer has the
necessary balance as it was traded away in the just executed swap and we
consider it invalid and we insert the invalid event for an order that
went through perfectly well.
# Changes
* [x] Don't consider in-flight orders invalid
* [x] Move in-flight filtering logic from run loop to solvable_orders
(move upstream)
## How to test
I had an e2e test to reproduce this which failed 6/10 times. After the
fix it fails 0/10.
---------
Co-authored-by: Martin Magnus
* Upgrade quinn-proto to 0.11.14 (#4245)
# Description
Cargo audit started flagging version 0.11.13, this PR upgrades it to
solve the audit issue
# Changes
* Upgrade quinn-proto to 0.11.14
## How to test
cargo-audit
* Update trivy action (#4248)
# Description
Updates the failing trivy action
# Changes
* Bump trivy to 0.35
## How to test
CI
* Migrate OKX solver (#4236)
# Description
Migrates the OKX solver from the https://github.com/gnosis/solvers repo
as per #4234.
## How to test
Migrated tests.
## How to migrate
1 line config change in the infra, which basically replaces the image.
* Debug endpoint (#4233)
# Description
Add a debug endpoint for order investigation. Given an order UID, it
returns the full lifecycle: order data, events
(created/ready/executing/traded), auction participation, proposed
solutions, executions, trades, settlement attempts, and fee policies.
Protected by a configurable auth token header.
# Changes
* New `GET /api/v1/debug/order/{uid}` endpoint behind `x-auth-token`
header auth
* `DebugReport` DB layer aggregates data from various tables (see data
sources)
* New `auction_orders` junction table (V106) to efficiently look up all
auctions an order participated in, replacing indirect derivation through
proposed_solutions/executions
* `save_auction()` now populates the junction table alongside
`competition_auctions`
* Configurable auth tokens via `debug_route_auth_tokens` in orderbook
config
* E2E test covering the full happy path + auth failure cases
## Queried tables
* orders (via single_order)
* order_events (via get_all)
* proposed_trade_executions + proposed_solutions (via
find_solutions_for_order — that's a JOIN)
* order_execution (via read_by_order_uid)
* trades (via trades)
* auction_orders (via fetch_auction_ids_by_order_uid)
* competition_auctions (via fetch_multiple)
* settlement_executions (via read_by_auction_ids)
* fee_policies (via fetch_by_order_uid)
## How to test
`cargo nextest run -p e2e debug_order --test-threads 1 --run-ignored
ignored-only`
Test will be flaky until we get
https://github.com/cowprotocol/services/pull/4239 in.
# Follow up
Include a concrete reason why an order was filtered out of an auction if
it was filtered out.
* [TRIVIAL] Log order uids with encoding errors (#4250)
# Description
Currently it's quite annoying to figure out when a solver provided a
solution for a given order that fails to encode.
# Changes
This PR adjusts the log to also mention the order uids of the solution
that failed to encode.
* Inline submission account config (#4242)
# Description
While testing a feature, I noticed that the driver's submission account
is currently rendered in our infra as follows:
```toml
[[drivers]]
name = "okx-solve"
url = "http://mainnet-driver-staging-.../"
[drivers.submission-account]
kms = "arn:aws:kms:eu-central-...."
```
, where the submission-account is separated, which is not really
convenient when manually editing configs.
This PR flattens the submission account config, so it will be rendered
as:
```toml
[[drivers]]
name = "okx-solve"
url = "http://mainnet-driver-staging-.../"
kms = "arn:aws:kms:eu-central-...."
```
* Extract autopilot config to configs crate (#4246)
# Description
Addresses
https://github.com/cowprotocol/services/pull/4235#discussion_r2910627059
# Changes
* Moves autopilot configs to configs crate
* Moves fee factor to configs crate
## How to test
Compilation + tests
* BitGet solver (#4249)
This effectively replicates https://github.com/gnosis/solvers/pull/203
# Summary
- Add a new solver that integrates with the
https://web3.bitget.com/en/docs/swap/ API to find swap routes, following
existing patterns
- ~~The Bitget API uses a two-step POST flow: `quote` (to get the
optimal routing market and output amount) followed by `swap` (to get the
on-chain calldata)~~ The BitGet team suggested using the
`request_mod="rich"` param in the `/swap` API, which makes the response
contain much more data, including the `outAmount`.
- ~~To mitigate the race condition between `quote` and `swap` calls,
slippage is applied to the quoted output and passed as `toMinAmount` to
the swap endpoint, ensuring consistency between what the calldata
enforces on-chain and what the solver reports~~ Not needed anymore
because of the previous point
- Only sell orders are supported - the Bitget API has no `exactOut` mode
# Changes
- Bitget API client and DTOs with HMAC-SHA256 request signing, base64
calldata decoding, typed ChainName enum, and serialize::U256 for amount
fields
- TOML config loading (endpoint, chain-id, api-key, api-secret)
- E2E tests: market sell order, buy order rejection, insufficient
liquidity, and out-of-price limit order
- `config/example.bitget.toml` - Example configuration
# How to test
New unit and manual e2e tests (ignored by default).
* Extract orderbook config to configs crate (#4247)
# Description
Essentially the same as
https://github.com/cowprotocol/services/pull/4246 but for the orderbook
# Changes
* Move orderbook configs to the configs crate
* Extract SameTokensPolicy
## How to test
Compilation + tests
* Extract order_quoting, banned_users, http_client configs to configs crate (#4253)
# Description
Extract shared configuration types (`OrderQuoting`, `BannedUsersConfig`,
`HttpClient`) from CLI arguments into the `configs` crate as
TOML-deserialized structs. This continues the migration of runtime
configuration from clap CLI args to structured TOML config files.
# Changes
* Move `OrderQuotingArguments` and `ExternalSolver` from
`shared::arguments` (clap) to `configs::order_quoting` (serde/TOML),
renaming to `OrderQuoting`
* Deduplicate `BannedUsersConfig` — was duplicated in
`configs::autopilot::banned_users` and
`configs::orderbook::banned_users`, now a single `configs::banned_users`
module shared by both
* Move `HttpClient` config to `configs::http_client`
* Add `TestDefault` impl for `OrderQuoting` and test helpers
(`ExternalSolver::new`, `OrderQuoting::test_with_drivers`)
* Update all e2e tests to pass `price-estimation-drivers` via config
structs instead of the removed CLI arg
* Add deserialization and roundtrip tests for `OrderQuoting`
## How to test
Existing tests
# Migration Guide
The following CLI arguments have moved to TOML config files. This
applies to **both autopilot and orderbook** services.
## Order Quoting (`[order-quoting]`)
| CLI arg / env var | TOML key (`[order-quoting]`) |
|---|---|
| `--price-estimation-drivers` / `PRICE_ESTIMATION_DRIVERS` |
`[[price-estimation-drivers]]` (see below) |
| `--eip1271-onchain-quote-validity` / `EIP1271_ONCHAIN_QUOTE_VALIDITY`
| `eip1271-onchain-quote-validity` |
| `--presign-onchain-quote-validity` / `PRESIGN_ONCHAIN_QUOTE_VALIDITY`
| `presign-onchain-quote-validity` |
| `--standard-offchain-quote-validity` /
`STANDARD_OFFCHAIN_QUOTE_VALIDITY` | `standard-offchain-quote-validity`
|
The `--price-estimation-drivers` pipe/comma-separated format
(`name|url,name2|url2`) is replaced by TOML tables:
```toml
[order-quoting]
eip1271-onchain-quote-validity = "10m"
presign-onchain-quote-validity = "10m"
standard-offchain-quote-validity = "1m"
[[order-quoting.price-estimation-drivers]]
name = "solver1"
url = "http://solver1:8080"
[[order-quoting.price-estimation-drivers]]
name = "solver2"
url = "http://solver2:8080"
```
## Banned Users
`BannedUsersConfig` is now shared between autopilot and orderbook
(previously duplicated). No config format changes — the `[banned-users]`
TOML section remains the same.
## HTTP Client (`[http-client]`)
| CLI arg / env var | TOML key (`[http-client]`) |
|---|---|
| `--http-timeout` / `HTTP_TIMEOUT` | `http-timeout` |
All defaults remain unchanged.
* Fix Bitget API signature when using proxy endpoint (#4256)
# Description
- Use the canonical Bitget API path (/bgw-pro/swapx/pro/) for HMAC
signature computation instead of deriving it from the configured
endpoint URL
- When a proxy is configured, the request URL path differs from what
Bitget expects in the signature, causing authentication failures
- The HTTP request still goes to the configured (possibly proxied) URL -
only the signature computation changes
- I think it was in one of the original PR comments, but I forgot about
it somehow
## How to test
Existing tests. Staging.
* Store reasons why an order was removed from auction (#4251)
# Description
When orders get filtered from an auction or marked invalid, we now
record why it happened. This PR adds a reason column to the order_events
table so we can distinguish between e.g. insufficient_balance,
banned_user, missing_price etc.
Currently these reasons are only visible in the DB / metrics.
# Changes
[x] New migration (V107): adds OrderFilterReason enum type and reason
column to order_events
[x] `solvable_orders` tracks the specific OrderFilterReason alongside
each filtered/invalid order UID
[x] Added a new filter reason when we filter an order out because it's
already in-flight (= being submitted)
[x] Added to order debug endopint
## How to test
```
cargo nextest run -p e2e local_node_debug_order --test-threads 1 --run-ignored ignored-only
```
* Move price-estimation config structs into configs (#4259)
# Description
Simulator refactor requires to move out a couple of dependencies out of
shared and reuse them elsewhere. One of them is price_estimation (#4258
with http-client refactor). As both the price_estimation and http-client
have their respective configs - having `price_estimation` depend on
`http-client` would cause cyclic dependencies on `configs`.
# Changes
This removes the dependency of configs on price_estimation making it
possible to refactor further common types.
It also does make sense for other crates to depend on configs, instead
of configs depending on other crates.
## How to test
E2E tests, no code changes, just moving code around.
* [TRIVIAL] Update BitGet solver chain names (#4257)
Some BitGet chain names were inconsistent and don't align with [the
official docs](https://web3.bitget.com/en/docs/swap/). This PR fixes it.
Tested on staging on each chain.
* Clean up solvers util (#4254)
# Changes
- Remove unused bytes.rs module and empty url.rs from
`crates/solvers/src/util/`
- Remove `fmt/hex.rs` module, replacing `Hex<'a>` wrapper with inline
`const_hex::encode_prefixed` calls (already a dependency)
- Replace `Bytes>` in `eth::Tx` with `alloy::primitives::Bytes`
which provides hex debug formatting out of the box
- Use `const_hex::decode` in Bitget DTO instead of manually stripping 0x
prefix + `hex::decode`
- Drop the `hex` crate dependency from solvers (no longer needed after
switching to `const_hex`)
## How to test
Existing tests
* Refactor http-client to separate crate (#4258)
# Description
During the simulator crate refactor I had to move a couple of types out
of shared to avoid cyclic dependency. It also makes sense since
price_estimation essentially duplicated http-client logic.
# Changes
Creates a new crate `http-client` where the previously
`shared::http_client` is present. Updated imports.
De-duplicated `price-estimation` http client,.
## How to test
E2E tests should pass. Logic is the same.
---------
Co-authored-by: Martin Magnus
* Increase quote verification gas limit (#4261)
# Description
Some insanely complicated quotes exceed the hardcoded 12M gas limit on
the simulation. I'm not sure why originally picked the very big but not
the highest possible value of 8M which we later bumped to 12M.
# Changes
This PR now makes this value configurable and sets the default to
ethereum's maximum amount of gas a single tx may consume.
Any quote that needs more gas than this can definitely not be included
in an ethereum block.
* Use write DB for latency sensitive queries (#4262)
# Description
Whenever the circuit breaker sees a new settlement onchain it asks the
API for the competition data on it to determine whether the tx was
allowed to be executed. Because the solver is supposed to be runnable by
anyone it fetches the necessary data from the public API instead of a DB
directly.
Yesterday a solver got wrongly deny-listed because the API did not
return the competition data for a given auction id. This was very
strange because we have logs confirming that the necessary data was
fully written to the DB at `2026-03-13 03:12:19` but the request coming
in at `2026-03-13 03:12:21` still returned no data.
In order to relieve strain on the primary DB we migrated all queries
that only read data to use the read replica instead.
Since the query is dirt simple and does not apply any complicated
filters or joins which could cause us to not return any data the most
likely culprit is the delay introduced by the replication process.
# Changes
Adjust the API to fetch latency sensitive competition data from the main
DB instead of the read replica.
In order to not comment multiple times why we use the write DB when only
read data I introduced private helper functions which return the
appropriate DB and commented why this is necessary.
* Allow full balance and allowance checking during order creation (#4229)
# Description
Most recently We have had an order that has passed our balance and
allowance checks, but ultimately the account did not have enough
allowance (up to the sell token amount) for it to be settled.
There are various balance checks in place (testing 1, 10, 100 transfer
amounts). Always checking the full sell amount would be a breaking
change, so it is introduced as additional parameter to the OrderCreation
request.
# Changes
Adds additional parameter to the OrderCreation request: fullBalanceCheck
(`full_balance_check`) which defaults to false. If set to true, the
order validation will attempt transfer of full sell token amount in
order to verify the account has enough balance and proper allowance.
This is an opt-in behavior for our partners to use for additional
robustness when placing simple orders (Flashloan orders or these using
wrappers still follow the old logic, of disabling the balance/allowance
checks since they can come from the additional interactions).
* Added `full_balance_check` to `OrderCreation` struct
* Sets the transfer amount to `sell_token_amount` for balance checks
* Added e2e test case covering the new behavior
* Updated the OpenAPI spec for order creation
## How to test
Test order creation when the account has not enough allowance or
balance, while enabling the fullBalanceCheck (it needs to have at least
1 atom of balance and allowance) - the order should not get created.
---------
Co-authored-by: Martin Magnus
* Move common eth domain types to separate crate (#4260)
# Description
Many crates duplicate eth specific domain types. The incoming simulator
crate would also have to have its own, with tedious conversions between
them.
Instead of doing that, the eth domain types are moved into a new crate
`eth-domain-types`. This PR migrates autopilot to use it.
There will be follow-up PRs migrating rest of the services.
# Changes
Moved autopilot's eth domain types into separate crate, changed the
imports.
## How to test
E2E tests should pass, it's a drop-in replacement.
---------
Co-authored-by: Martin Magnus
* Extract price estimation config to configs crate (#4255)
# Description
Extract `price_estimation::Arguments` (CLI/clap) into the `configs`
crate as TOML-deserialized structs. This continues the migration of
runtime configuration from clap CLI args to structured TOML config
files.
# Changes
* Remove `price_estimation::Arguments` struct and all its nested CLI
argument structs (`CoinGecko`, `CoinGeckoBuffered`,
`QuoteVerificationMode`, `tenderly_api::Arguments`,
`balance_overrides::Arguments`)
* Create `configs::price_estimation::PriceEstimation` with TOML
deserialization for: Tenderly, rate limiter, 1Inch, CoinGecko (including
optional buffered config), quote settings, balance overrides, and token
verification bypass list
* Extract `configs::native_price::NativePriceConfig` and
`configs::native_price_estimators::NativePriceEstimators` into their own
modules (previously lived in `configs::price_estimation`)
* Add `configs::deserialize_env` module with
`deserialize_optional_string_from_env()` to support `%ENV_VAR_NAME`
references in TOML files for secrets
* Add `serde::Deserialize` / `serde::Serialize` derives to
`rate_limit::Strategy` (replacing `FromStr` comma-separated parsing with
structured TOML table)
* Add `serde::Deserialize` / `serde::Serialize` impls to
`balance_overrides::TokenConfiguration` for TOML round-tripping
* Add `PriceEstimation` field to both autopilot and orderbook
`Configuration` structs
* Update all affected e2e tests to pass price estimation config via TOML
structs instead of removed CLI args
## How to test
Existing tests — unit tests cover deserialization defaults, full
deserialization, roundtrip serialization, and secret redaction in debug
output.
# Migration Guide
The following CLI arguments have moved to TOML config files. This
applies to **both autopilot and orderbook** services.
## Price Estimation (`[price-estimation]`)
### Tenderly (`[price-estimation.tenderly]`)
| CLI arg / env var | TOML key |
|---|---|
| `--tenderly-user` / `TENDERLY_USER` | `[price-estimation.tenderly]` →
`user` |
| `--tenderly-project` / `TENDERLY_PROJECT` |
`[price-estimation.tenderly]` → `project` |
| `--tenderly-api-key` / `TENDERLY_API_KEY` |
`[price-estimation.tenderly]` → `api-key` |
```toml
[price-estimation.tenderly]
user = "my-user"
project = "my-project"
api-key = "my-tenderly-key"
```
### Rate Limiter (`[price-estimation.price-estimation-rate-limiter]`)
| CLI arg / env var | TOML key |
|---|---|
| `--price-estimation-rate-limiter` / `PRICE_ESTIMATION_RATE_LIMITER` |
`[price-estimation.price-estimation-rate-limiter]` (see below) |
The old comma-separated format (`"2.0,1s,30s"`) is replaced by a TOML
table:
```toml
[price-estimation.price-estimation-rate-limiter]
back-off-growth-factor = 2.0
min-back-off = "1s"
max-back-off = "30s"
```
### Quote Settings
| CLI arg / env var | TOML key (`[price-estimation]`) | Default |
|---|---|---|
| `--amount-to-estimate-prices-with` / `AMOUNT_TO_ESTIMATE_PRICES_WITH`
| `amount-to-estimate-prices-with` | *(network-dependent)* |
| `--quote-inaccuracy-limit` / `QUOTE_INACCURACY_LIMIT` |
`quote-inaccuracy-limit` | `1` |
| `--quote-verification` / `QUOTE_VERIFICATION` | `quote-verification` |
`"unverified"` |
| `--quote-timeout` / `QUOTE_TIMEOUT` | `quote-timeout` | `"5s"` |
| `--tokens-without-verification` / `TOKENS_WITHOUT_VERIFICATION` |
`tokens-without-verification` | `[]` |
| `--max-gas-per-tx` / `MAX_GAS_PER_TX` | `max-gas-per-tx` | `16777215`
|
The `--tokens-without-verification` comma-separated format is replaced
by a TOML array:
```toml
[price-estimation]
quote-inaccuracy-limit = "0.01"
quote-verification = "enforce-when-possible"
quote-timeout = "10s"
amount-to-estimate-prices-with = "1000000000000000000"
max-gas-per-tx = 16777215
tokens-without-verification = ["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"]
```
### 1Inch API (`[price-estimation.one-inch]`)
| CLI arg / env var | TOML key | Default |
|---|---|---|
| `--one-inch-api-key` / `ONE_INCH_API_KEY` |
`[price-estimation.one-inch]` → `api-key` | *(none)* |
| `--one-inch-url` / `ONE_INCH_URL` | `[price-estimation.one-inch]` →
`url` | `"https://api.1inch.dev/"` |
```toml
[price-estimation.one-inch]
api-key = "my-key"
url = "https://api.1inch.dev/"
```
### CoinGecko (`[price-estimation.coin-gecko]`)
| CLI arg / env var | TOML key | Default |
|---|---|---|
| `--coin-gecko-api-key` / `COIN_GECKO_API_KEY` |
`[price-estimation.coin-gecko]` → `api-key` | *(none)* |
| `--coin-gecko-url` / `COIN_GECKO_URL` |
`[price-estimation.coin-gecko]` → `url` |
`"https://api.coingecko.com/api/v3/simple/token_price"` |
| `--coin-gecko-debouncing-time` / `COIN_GECKO_DEBOUNCING_TIME` |
`[price-estimation.coin-gecko.buffered]` → `debouncing-time` | *(none)*
|
| `--coin-gecko-broadcast-channel-capacity` /
`COIN_GECKO_BROADCAST_CHANNEL_CAPACITY` |
`[price-estimation.coin-gecko.buffered]` → `broadcast-channel-capacity`
| *(none)* |
The two buffered flags (which had to be provided together) are now an
optional nested table:
```toml
[price-estimation.coin-gecko]
api-key = "my-cg-key"
url = "https://pro-api.coingecko.com/api/v3/simple/token_price"
[price-estimation.coin-gecko.buffered]
debouncing-time = "500ms"
broadcast-channel-capacity = 100
```
### Balance Overrides (`[price-estimation.balance-overrides]`)
| CLI arg / env var | TOML key (`[price-estimation.balance-overrides]`)
| Default |
|---|---|---|
| `--quote-token-balance-overrides` / `QUOTE_TOKEN_BALANCE_OVERRIDES` |
`token-overrides` | `""` |
| `--quote-autodetect-token-balance-overrides` /
`QUOTE_AUTODETECT_TOKEN_BALANCE_OVERRIDES` | `autodetect` | `false` |
| `--quote-autodetect-token-balance-overrides-probing-depth` /
`QUOTE_AUTODETECT_TOKEN_BALANCE_OVERRIDES_PROBING_DEPTH` |
`probing-depth` | `60` |
| `--quote-autodetect-token-balance-overrides-cache-size` /
`QUOTE_AUTODETECT_TOKEN_BALANCE_OVERRIDES_CACHE_SIZE` | `cache-size` |
`1000` |
The `token-overrides` field uses the same `ADDR@SLOT` comma-separated
format as before:
```toml
[price-estimation.balance-overrides]
token-overrides = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2@3"
autodetect = true
probing-depth = 30
cache-size = 500
```
All defaults remain unchanged.
---------
Co-authored-by: Marcin Szymczak
* Eth domain types driver (#4263)
# Description
Based on #4260 continues the effort of unifying eth domain types in
driver.
# Changes
- Use eth-domain-types in driver
- Hides the internals of ContractAddress and TokenAddress and derives
Deref on them.
## How to test
E2E tests
* Add custom solver errors (#4268)
# Description
Takes over from #4232 by @ashleychandy.
My changes over the @ashleychandy's PR:
* make enum not tagged for backwards compatibility
* merge in main
* lint
Closes #4232
---
Desc of the original PR:
# Description
Fixes #4222
Previously, when solvers couldn't compute quotes for RWA tokens, they
returned a generic `QuotingFailed` error. This made it difficult for the
frontend to provide helpful feedback.
This change adds support for custom solver errors that can be returned
when quoting fails. Solvers can now indicate specific reasons like:
- `TradingOutsideAllowedWindow`
- `TokenTemporarilySuspended`
- `InsufficientLiquidity`
- `UnauthorizedTrader`
- `Other`
When a solver returns a custom error, the driver propagates it through
the API response so the frontend can display an appropriate error
message.
# Changes
- Added `SolverError` enum with 5 variants in `solvers-dto`
- Added optional `error` field to `Solutions` DTO
- Updated driver to detect and propagate custom solver errors
- Added 5 new error kinds to the API error handler
- Updated observability to track `SolverCustomError` metric
- Updated mock solver in e2e tests
---------
Co-authored-by: ashleychandy
Co-authored-by: Ashley Chandy <76095880+ashleychandy@users.noreply.github.com>
Co-authored-by: José Duarte
* Remove lens from the servies (#4269)
# Description
Remove lens (Chain ID 232) from the codebase since it is no longer
supported by the organization.
# Changes
Remove lens from the configs and the chain lists across the services.
## How to test
* Playground config update
* configs/local update
## How to test
Run the playground
* Extract shared CLI arguments to config file-based SharedConfig (#4266)
# Description
Continues the migration from CLI-based configuration to file-based
configuration by moving shared arguments (node URL, contract addresses,
gas estimators, logging, tracing, ethrpc, current block) from
`clap`-based `shared::arguments::Arguments` to a serde-based
`SharedConfig` in the `configs` crate.
This is the final step in eliminating `CliArguments` from the autopilot
and orderbook `run()` functions, making both services fully driven by
their TOML configuration files.
# Changes
* Add `crates/configs/src/shared.rs` with `SharedConfig` and sub-configs
(`EthRpcConfig`, `CurrentBlockConfig`, `LoggingConfig`, `TracingConfig`,
`ContractAddresses`, `GasEstimatorType`, `TokenBucketFeeOverride`) — all
with serde deserialization, defaults, and tests.
* Remove the `Arguments` struct and related `Display` impl from
`crates/shared/src/arguments.rs`, keeping only types still used
elsewhere.
* Update `autopilot::run()` and `orderbook::run()` to read shared
settings from `config.shared` instead of the `CliArguments` parameter,
removing `CliArguments` from their signatures entirely.
* Add `SharedConfig` field to both `autopilot::Configuration` and
`orderbook::Configuration`.
* Update `configs/local/autopilot.toml`, `configs/local/orderbook.toml`,
and `playground/*.toml` with the new shared config sections, removing
corresponding CLI flags from `playground/docker-compose*.yml`.
* Simplify e2e test setup: replace CLI argument string building and
`ignore_overwritten_cli_params` hack with direct `SharedConfig` struct
construction. Remove `extra_args` / `ExtraServiceArgs` parameters from
`start_autopilot`, `start_api`, `start_protocol`, and related methods.
## How to test
1. `cargo nextest run -p configs` — verifies `SharedConfig`
deserialization (default and full round-trip).
2. `cargo nextest run -p autopilot -p orderbook` — unit tests for both
services.
3. E2E tests: `cargo nextest run -p e2e local_node --test-threads 1
--run-ignored ignored-only` — confirms the simplified test harness works
end-to-end.
4. Playground: `docker compose -f playground/docker-compose.fork.yml up
-d` — verifies updated TOML configs and removed CLI flags work in the
local dev environment.
* Add knob to configure gas ceiling for unverified quotes (#4277)
# Description
We have a situation where tsolver, our main solver for RWA tokens, has a
bug where they estimate extreme gas prices. We are introducing this knob
as a hack to set a ceiling before they fix this on their end.
# Changes
* [x] New config option to set a ceiling on gas for unverified quotes
## How to test
Unit tests.
* Simulator crate (#4265)
# Description
Transaction simulation machinery is spread throughout our codebase. Due
to how domain-specific and tied to internal types (driver,
price-estimation) they are, it's hard to reuse it for new purposes, such
as simulation endpoint or full transaction gas simulation for solvers.
# Changes
Introduces `simulator` crate which contains all tools related to
simulating a real or fake settlement:
- `Simulator` struct as previously was found in `driver`
- `SwapSimulator` struct which helps to construct fake settlements
- Tenderly API collected and unified into `simulator` crate.
## How to test
- E2E test
- Manual staging deployment for testing.
---------
Co-authored-by: José Duarte
* [TRIVIAL] Speed up analytics DB replication job (#4279)
# Description
Every 10 minutes after the hour we run a job copying some data from the
main DB to an analytics DB. The heaviest workload is copying the
`order_quotes` based on the `creation_timestamp`.
# Changes
In order to greatly speed things up this PR introduces an index on the
`creation_timestamp`.
With those queries now also being very fast we can significantly reduce
the global DB query limit to further protect it against long running
queries avoiding DoS issues in the future.
## How to test
I manually created the indexes on the prod DB and one sync job already
ran using it. The graph confirms that the CPU load now barely changes
when the job runs.
* fix: Don't quote unsupported tokens (#4280)
# Description
We got a report from the team that gnosis solvers were still quoting RWA
tokens even though they were configured as unsupported. The reason for
this was the only the /solve path was taking into account whether the
tokens were supported or not, so the gnosis continued quoting even
though they wouldn't solve the orders. I went with reusing
`filter_unsupported_orders_in_auction` even though it's slightly awkward
with the fake auctions to get to use the logging and metrics from the
already existing code.
* Add serde tag to SimulatorKind (#4281)
# Description
Simulator's kind config can not be deserialized without a #[serde(tag)]
# Changes
Adds #[serde(tag)] to SimulatorKind in configs crate and unit tests.
* Clamp gas value before declaring a winner (#4282)
# Description
Follow up to https://github.com/cowprotocol/services/pull/4277 and
https://github.com/cowprotocol/services/pull/4276.
Those PRs clamped the gas estimate AFTER we already picked the best
quote but since clamping the gas is also supposed to influence which
quote we pick it has to happen BEFORE picking a winner.
# Changes
This PR moves the clamping logic into the trade verifier.
* Fix cargo audit vulnerabilities (aws-lc-sys, rustls-webpki) (#4286)
## Summary
Resolves all 7 `cargo audit` advisories by updating dependencies.
**aws-lc-sys** 0.35.0 → 0.39.0 — fixes 5 crypto-failure advisories
(RUSTSEC-2026-{0044,0045,0046,0047,0048}) including PKCS7 verification
bypasses (CVSS 7.5) and X.509 name constraint bypass. Updated via
`aws-lc-rs` 1.15.2 → 1.16.2.
**rustls-webpki** 0.103.8 → 0.103.10 — fixes CRL distribution point
matching (RUSTSEC-2026-0049). Direct `cargo update`.
**rustls-webpki 0.101.7** (same RUSTSEC-2026-0049) — this old version
was dragged in by `aws-sdk-s3`'s `rustls` feature, which activates the
legacy TLS path (`aws-smithy-runtime/tls-rustls` → `legacy-rustls-ring`
→ `rustls 0.21` → `rustls-webpki 0.101.7`). The 0.101.x line has no
patch. Fixed by switching `aws-sdk-s3` from `features = ["rustls"]` to
`features = ["default-https-client"]`, which uses the modern
`rustls-aws-lc` backend instead. This removes `rustls 0.21` from the
tree entirely.
**recursion_limit** — the AWS SDK update introduced slightly deeper type
nesting that overflows the default compiler recursion limit (needs 130,
default is 128) when building autopilot tests. Added `#![recursion_limit
= "160"]` to `autopilot`.
## Test plan
- [x] `cargo check --workspace` and `cargo check -p autopilot --tests`
pass
- [x] `cargo audit` reports 0 vulnerabilities
* Map Bitget API error codes to internal solver errors (#4285)
## Description
- Parse `error_code` and `message` fields from Bitget API responses
(previously only `status` and `data` were parsed)
- Map Bitget error codes (80000–80010) to appropriate internal error
variants:
- **NotFound**: 80001 (insufficient balance), 80002 (below min), 80003
(above max), 80004 (expired), 80005 (no liquidity), 80008 (reverse
quote), 80009 (token info), 80010 (price info)
- **BadRequest**: 80006 (illegal request)
- **Api** (logged): 80000 (internal), 80007 (partner invalid), unknown
codes
- Handle HTTP 429 explicitly as `RateLimited` before the generic status
check
Previously all non-zero `status` values except hardcoded 404/429 fell
through to a generic `Api` error, which led to a lot of alert noise. The
old 404/429 mapping in `handle_api_error` didn't match the actual Bitget
API format (which uses `status: 0/1` + `error_code: 80xxx`).
Error code reference:
https://web3.bitget.com/en/docs/swap-order#error-code-list
## How to test
- [x] All 5 existing bitget tests pass (`cargo nextest run -p solvers
bitget`)
- [x] Updated `not_found` test to use the actual Bitget error response
format (`status: 1, error_code: 80005`)
* [EASY] Improve BitGet test (#4264)
Improves the ignored by default BitGet API test that covers all the
chain, making it much easier to quickly test any changes in the
request/response structs.
* [EASY] Clean up remaining cargo audit advisories (#4287)
## Summary
Follow-up to #4286. Resolves additional `cargo audit` warnings and
cleans up stale ignore entries.
- **Remove `idna` and `protobuf` from ignore list** — RUSTSEC-2024-0421
and RUSTSEC-2024-0437 are no longer triggered by current dependency
versions
- **Update keccak 0.1.5 → 0.1.6** — fixes RUSTSEC-2026-0012 (unsound
ARMv8 assembly backend) and resolves yanked crate warning
- **Update aws-sdk-s3 1.119.0 → 1.127.0** — removes `lru 0.12.5` from
the tree, fixing RUSTSEC-2026-0002 (unsound `IterMut`)
After this PR, `cargo audit` reports zero vulnerabilities and zero
warnings. The remaining ignore entries are genuinely unfixable:
- `rsa` — no patch available
- `derivative`/`instant`/`paste` — unmaintained, pinned by transitive
deps
- `model` — false positive matching our local crate name
## Test plan
- [x] `cargo check --workspace` passes
- [x] `cargo audit` reports 0 vulnerabilities, 0 warnings
* set docker image tag to git-sha aswell (#4289)
We currently only set branch names and git-tags as additional docker
image tags. it would make it easier to find the offending git commit
breaking staging if we had also a docker tag of the git short-sha on the
image
* Map remaining Bitget error codes (80011-80015) (#4290)
## Summary
Follow-up to #4285. The initial error code mapping only covered
80000–80010 but the Bitget API also returns 80011–80015. Unmapped codes
fell through to `Error::Api` causing unnecessary warn-level logs (e.g.
`api { code: 80012, message: "" }`).
New mappings:
- **80011** (failed to generate calldata) → `NotFound`
- **80012** (quote failed, no quote available) → `NotFound`
- **80013** (unsupported chain) → `BadRequest`
- **80014** (order not found) → `NotFound`
- 80015 (order already submitted) → left as `Api` (shouldn't occur in
our flow)
Ref: https://web3.bitget.com/en/docs/swap-order#error-code-list
## Test plan
- [x] All 5 bitget tests pass
* Map OKX error code 51005 (honeypot token) to NotFound (#4293)
## Description
Map undocumented OKX error code 51005 to `NotFound` instead of the
generic `Api` error.
OKX returns this code for tokens flagged as honeypots or leveraged
tokens (e.g. *"0x.. cannot be traded as it may be a honeypot or
leveraged token"*). This is functionally identical to 82104 (token not
supported) - the token simply can't be traded. Previously, it fell
through to `Error::Api` and produced unnecessary warn-level logs. We've
encountered false-positive alerts for the
[Tornado.Cash](https://etherscan.io/address/0x77777feddddffc19ff86db637967013e6c6a116c#code)
token, which doesn't seem to be a honeypot at all.
Code 51005 is not in the [OKX error code
docs](https://web3.okx.com/build/dev-docs/wallet-api/dex-error-code).
## How to test
Existing tests
* Fix simulator using raw gas estimator without tip adjustments (#4298)
## Summary
Fixes a regression introduced in #4265 (Simulator crate) that caused
frequent "max fee per gas less than block base fee" errors during
settlement encoding, particularly on Arbitrum.
### Root cause
`Ethereum::gas_estimator()` returns `self.inner.gas.gas` — the **raw**
`dyn GasPriceEstimating` without tip adjustments. Before #4265,
`Ethereum::simulation_gas_price()` called
`GasPriceEstimator::estimate()` which adds a configurable tip buffer
(default 3 Gwei or 5%) on top of the raw estimate. After #4265, the
simulator receives the raw estimator, so simulation gas prices land
right at the base fee with no buffer.
On Arbitrum (~250ms blocks), the base fee changes constantly. The tiny
gap between estimation and `eth_call` execution is enough for the base
fee to tick up past the estimated price.
### Fix
Implement `GasPriceEstimating` for `GasPriceEstimator` and return the
wrapped estimator from `gas_estimator()`, so the simulator gets the same
tip-adjusted estimates the driver used before #4265.
## Test plan
- [x] `cargo check -p driver` passes
- [ ] Deploy to staging and verify "max fee per gas less than block base
fee" errors stop on Arbitrum
* Remove Enso's simulator support (#4294)
# Description
Remove the Enso Trade Simulator backend. It's unused and adds
unnecessary code to maintain.
# Changes
* Remove the unused Enso simulator backend — deleted the `enso/` module
and cleaned up all references in configs, driver, and simulator crates.
## How to test
```
cargo nextest run -p simulator -p configs -p driver
```
* Add Claude Code GitHub Workflow (#4292)
## Summary
Adds Claude Code GitHub integration with two workflows, review
guidelines, and Rust tooling.
### Workflows
1. **`claude.yml`** — Responds to `@claude` mentions in PR/issue
comments. Claude analyzes the context and executes the request.
2. **`claude-code-review.yml`** — Automatic code review when a PR is
marked ready for review. Uses the official `code-review` plugin with
multi-agent verification. Does not run on drafts, pushes, or reopens.
Includes `rust-analyzer-lsp` plugin for real Rust code intelligence
(type checking, diagnostics, go-to-definition) during reviews.
### Review guidelines (`REVIEW.md`)
Controls what Claude flags during reviews:
- Prioritizes correctness, safety, security over style
- Domain-specific checks: token amount conversions, error code mapping,
settlement compatibility
- Explicit false-positive exclusion list (no style nits, no pre-existing
issues, no theoretical concerns)
- Severity levels aligned with the code-review plugin's standard
categories (Normal, Nit)
- Strict output format: file/line, what's wrong, why it matters,
suggested fix
### Security
- API key stored as GitHub Actions secret
- Only repo write-access users can trigger workflows
- All runs visible in GitHub Actions history
## Test plan
- [ ] Merge and verify `@claude` mention triggers in a test PR comment
- [ ] Verify auto-review triggers when a PR is marked ready for review
- [ ] Verify auto-review does NOT trigger on draft PRs or pushes
* Log original request ID when reusing shared in-flight quote requests (#4300)
## Background
Fast and optimal quoters share the same `ExternalTradeFinder` instance
(via `Arc`), so `RequestSharing` already deduplicates
identical concurrent requests. However, when a hitchhiker reused an
in-flight request, there was no trace linking it back to the original
HTTP call, making it hard to debug why the optimal quoter failed to
provide solutions, while the fast one succeeded for basically the same
quote competition or vice versa.
## Changes
- Extended `RequestSharing::shared_or_else` to return a `SharedResult`
that indicates whether an existing in-flight request was reused
(`is_shared` flag), improving observability of request deduplication.
- In `ExternalTradeFinder`, the HTTP request ID (`X-REQUEST-ID`) is now
embedded in the shared future's result. When a caller (e.g. the fast or
optimal quoter) reuses an in-flight request instead of sending a new
one, a debug log is emitted with the `original_request_id` — making it
possible to trace which HTTP request produced a given quote result.
- All other `shared_or_else` callers updated to use the new `.future`
field (no behavioral change).
## How to test
Using staging, use the cowswap UI to get some quotes. Search for the new
log.
* Allow solvers to set custom gas fees in their solution (#4299)
## Summary
Adds optional `maxFeePerGas` and `maxPriorityFeePerGas` fields to the
solver Solution response. When provided, these override the driver's
default gas price estimation during settlement submission.
### Behavior
- Both fields must be provided together or both absent
- Solvers can set fees **higher or lower** than the driver default,
since the solver pays from their own balance, so they self-regulate
- When a replacement transaction is pending (same nonce), the solver's
values are raised to at least the replacement minimum (node requirement
to accept the replacement)
- Merged solutions discard gas fee overrides (no meaningful way to merge
per-solution gas preferences)
### Changes
- Add `max_fee_per_gas` and `max_priority_fee_per_gas` to `Solution`
- Add `GasFeeOverride` type, carry through `Solution` → `Settlement`
- Apply override to `final_gas_price` before submission
## How to test
New e2e test
## Related issues
Fixes #4297
* Log custom solver errors on quoting (#4301)
# Description
Adds a log for the custom error that the solver returned
Context:
https://nomevlabs.slack.com/archives/C0375NV72SC/p1774966168341339?thread_ts=1774881240.020949&cid=C0375NV72SC
# Changes
* Log custom error
## How to test
NA
* Simulation endpoint (#4275)
# Description
Based on #4265
Adds a /api/v1/debug/simulation/{uid} endpoint to the orderbook that
lets you simulate an order's execution via Tenderly.
# Changes
- debug_simulation.rs — new API handler that accepts an order UID and
returns the Tenderly simulation request + any error
- Orderbook::simulate_order() — fetches the order, encodes it as a swap,
simulates it, and returns the Tenderly request payload
- OrderSimulator struct — wraps SwapSimulator with chain ID context;
handles encoding orders into EncodedSwap and running simulations
### Notice
**Simulation runs against the current block (not a historical replay at
the block the order was filled), and that it uses the original order
amounts — so for partially filled orders, the full amount is simulated
against the trader's current balance.**
### Follow-up PR
- [ ] Add support to simulate on specific block number
https://github.com/cowprotocol/services/pull/4305
- [ ] Add support for partially filled orders.
- [ ] Custom order simulation (not an existing one)
https://github.com/cowprotocol/services/pull/4304
Encoding improvements in simulator:
- InteractionEncoding trait extracted so both Interaction and
InteractionData (from model crate) can be encoded — this allows order
pre/post interactions to be encoded directly without manual conversion
- WrapperCall struct + encode_wrapper_settlement() function added to
handle settlements that go through wrapper contracts
- SwapSimulator::fake_swap() extended to support wrapper contracts in
the query
Supporting changes:
- app-data: added wrappers() accessor to expose wrapper calls from app
data
- configs/orderbook: added config for the new simulator (optional —
order_simulation_gas_limit: None keeps existing behavior)
- price-estimation: refactored to use the new InteractionEncoding trait
- driver/encoding: cleanup — moved some encoding logic to the simulator
crate
The OpenAPI spec has been updated with:
Path `/api/v1/debug/simulation/{uid}` — GET endpoint that takes an order
UID and returns 200 (OrderSimulation), 404 (not found), 501 (not
enabled), or 500 (internal error).
New schemas:
- OrderSimulation — top-level response with tenderly_request and
optional error
- TenderlyRequest — the full Tenderly simulation request structure
- SimulationType — enum full | quick | abi:
- full (default): Detailed decoded output — call trace, function,
inputs/outputs, state diffs, and logs with Solidity types.
- quick: Raw, minimal output only. Fastest option; no decoding.
- abi: Decoded function inputs/outputs and logs, but no state diffs.
Middle ground between quick and full.
AccessListItem — address + storage_keys
StateObject — balance/code/storage overrides
## How to test
Create order in local playground, query for its simulation. Verify on
tenderly.
Example output:
```json
{
"tenderly_request": {
"network_id": "1",
"from": "0xfcc789354262dd9c2f2ff1b0a5f9067b55af1bfa",
"to": "0xa513e6e4b8f2a923d98304ec87f64353c4d5c853",
"input": "0x13d79a0b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005fbdb2315678afecb367f032d93f642f64180aa300000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009315fc8ffae493123b9b6b1c93d50c9b9eef03440000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000149315fc8ffae493123b9b6b1c93d50c9b9eef03440000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"gas": 16777215,
"simulation_type": "full",
"save": true,
"save_if_fails": true,
"state_objects": {
"0x68b1d87f95878fe05b998f19b66f4baba5de1aed": {
"storage": {
"0xd7a1f0b46140686e5b4c405dcbec93c326c8c0e52cb615e05dcf53ad4119c720": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000"
}
},
"0x9315fc8ffae493123b9b6b1c93d50c9b9eef0344": {
"code": "0x608060405260043610610037575f3560e01c80631626ba7e1461008d578063542eb77d14610104578063eb5625d9146101255761003e565b3661003e57005b5f6100835f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525062010000939250506101449050565b9050805160208201f35b348015610098575f5ffd5b506100cf6100a7366004610b01565b7f1626ba7e000000000000000000000000000000000000000000000000000000009392505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200160405180910390f35b34801561010f575f5ffd5b5061012361011e366004610b9c565b6101c2565b005b348015610130575f5ffd5b5061012361013f366004610c00565b610916565b60605f8373ffffffffffffffffffffffffffffffffffffffff168360405161016c9190610c3e565b5f60405180830381855af49150503d805f81146101a4576040519150601f19603f3d011682016040523d82523d5f602084013e6101a9565b606091505b5092509050806101bb57815160208301fd5b5092915050565b7f02565dba7d68dcbed629110024b7b5e785bfc1a484602045eea513de8a2dcf99805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082161790915560ff16156102a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f70726570617265537761702063616e206f6e6c792062652063616c6c6564206f60448201527f6e6365000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036103e4576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa158015610340573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103649190610c6a565b9050838110156103e2575f6103798286610c81565b90508047106103e0578373ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b1580156103c8575f5ffd5b505af11580156103da573d5f5f3e3d5ffd5b50505050505b505b505b5f8573ffffffffffffffffffffffffffffffffffffffff16639b552cc26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561042e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104529190610cb9565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff80831660248301529192505f9187169063dd62ed3e90604401602060405180830381865afa1580156104c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104eb9190610c6a565b905084811015610748576040517feb5625d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8088166004830152831660248201525f6044820152309063eb5625d9906064015f604051808303815f87803b158015610567575f5ffd5b505af1925050508015610578575060015b506040517feb5625d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8088166004830152831660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6044820152309063eb5625d9906064015f604051808303815f87803b15801561060b575f5ffd5b505af192505050801561061c575060015b506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff83811660248301525f919088169063dd62ed3e90604401602060405180830381865afa158015610690573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b49190610c6a565b905085811015610746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f74726164657220646964206e6f7420676976652074686520726571756972656460448201527f20617070726f76616c7300000000000000000000000000000000000000000000606482015260840161029a565b505b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8816906370a0823190602401602060405180830381865afa1580156107b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d69190610c6a565b90508581101561090c5773ffffffffffffffffffffffffffffffffffffffff841663494666b688610807848a610c81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044015f604051808303815f87803b15801561086f575f5ffd5b505af1925050508015610880575060015b61090c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f74726164657220646f6573206e6f74206861766520656e6f7567682073656c6c60448201527f20746f6b656e0000000000000000000000000000000000000000000000000000606482015260840161029a565b5050505050505050565b61093773ffffffffffffffffffffffffffffffffffffffff8416838361093c565b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092019092526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052905f906109ce90861683610a46565b90506109d981610a5a565b610a3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5361666545524332303a20617070726f76616c206661696c6564000000000000604482015260640161029a565b5050505050565b6060610a53835f84610a7f565b9392505050565b5f81515f1480610a79575081806020019051810190610a799190610cd4565b92915050565b60605f8473ffffffffffffffffffffffffffffffffffffffff168484604051610aa89190610c3e565b5f6040518083038185875af1925050503d805f8114610ae2576040519150601f19603f3d011682016040523d82523d5f602084013e610ae7565b606091505b509250905080610af957815160208301fd5b509392505050565b5f5f5f60408486031215610b13575f5ffd5b83359250602084013567ffffffffffffffff811115610b30575f5ffd5b8401601f81018613610b40575f5ffd5b803567ffffffffffffffff811115610b56575f5ffd5b866020828401011115610b67575f5ffd5b939660209190910195509293505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610b99575f5ffd5b50565b5f5f5f5f5f60a08688031215610bb0575f5ffd5b8535610bbb81610b78565b94506020860135610bcb81610b78565b9350604086013592506060860135610be281610b78565b91506080860135610bf281610b78565b809150509295509295909350565b5f5f5f60608486031215610c12575f5ffd5b8335610c1d81610b78565b92506020840135610c2d81610b78565b929592945050506040919091013590565b5f82515f5b81811015610c5d5760208186018101518583015201610c43565b505f920191825250919050565b5f60208284031215610c7a575f5ffd5b5051919050565b81810381811115610a79577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60208284031215610cc9575f5ffd5b8151610a5381610b78565b5f60208284031215610ce4575f5ffd5b81518015158114610a53575f5ffdfea164736f6c634300081e000a"
},
"0xfcc789354262dd9c2f2ff1b0a5f9067b55af1bfa": {
"balance": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
},
"0x5fc8d32690cc91d4c39d9d3abcbd16989f875707": {
"code": "0x6080604052348015600e575f5ffd5b50600436106026575f3560e01c806302cc250d14602a575b5f5ffd5b603b6035366004604f565b50600190565b604051901515815260200160405180910390f35b5f60208284031215605e575f5ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681146080575f5ffd5b939250505056fea164736f6c634300081e000a"
}
}
},
"error": null
}
```
# Migration Guide: simulation-endpoint branch
New field: order-simulation-gas-limit
A new optional top-level field has been added to the orderbook TOML
configuration.
Type: string (decimal integer, interpreted as U256)
Default: omitted / disabled
## Enable the order simulation debug endpoint
`order-simulation-gas-limit = "16777215"`
Effect:
When absent (default): the GET `/api/v1/debug/simulation/{uid}` endpoint
is disabled. Requests return a 501 Not Implemented response.
When present: the endpoint is enabled. The value sets the gas limit used
when simulating the order's settlement call via Tenderly (through the
price estimation driver's balance-override infrastructure).
Recommended value: "16777215" (0xFFFFFF — same as the E2E test default).
Adjust downward if you want to cap simulation gas usage.
No action required if you do not want to expose the simulation endpoint
— omitting the field is the safe default.
---------
Co-authored-by: José Duarte
Co-authored-by: ilya
* Add block number to order simulation (#4305)
# Description
The order simulation endpoint would always run against the latest block.
It is limiting for investigating already filled or partially filled
orders.
# Changes
Add query parameter to the order simulation endpoint to allow specifying
a block number
## How to test
E2E test creates an order, withdraws trader's sell tokens on block A and
funds the account on block B. The order simulation fails for block A and
succeeds for block B.
---------
Co-authored-by: José Duarte
Co-authored-by: ilya
* Update GH actions to use pinned commit SHA (#4312)
# Description
Most recently we have started to enforce GH actions with pinned commits
to full SHA. This caused our CI jobs to fail since not all of the
actions are pinned.
# Changes
Fixed extractions/setup-just in pull-request.yaml — The old SHA
(e33e0265...) pointed to a version whose action.yaml internally called
extractions/setup-crate@v1 (unpinned). Updated to 53165ef7... (v4.0.0)
which internally pins setup-crate@0551596....
Fixed yu-ichiro/spin-up-docker-compose-action in pull-request.yaml —
This composite action internally used actions/cache@v3 and
docker/setup-buildx-action@v1 (both unpinned), even though those steps
were gated behind bake/registry flags we never set. Replaced all 4
usages with direct docker compose run steps since the action was only
ever used as a thin wrapper around docker compose up.
## How to test
PR checks should pass now.
* Custom order simulation (#4304)
# Description
The order simulation endpoint allows one to simulate a specific,
existing order. It is useful to be able to simulate any, custom order.
# Changes
Implements a POST endpoint `/api/v1/debug/simulation` that allows a
request specifying custom order details to be simulated:
```
pub struct SimulationRequest {
pub sell_token: Address,
pub buy_token: Address,
#[serde_as(as = "HexOrDecimalU256")]
pub sell_amount: alloy::primitives::U256,
#[serde_as(as = "HexOrDecimalU256")]
pub buy_amount: alloy::primitives::U256,
pub kind: OrderKind,
pub owner: Address,
#[serde(default)]
pub receiver: Option,
#[serde(default)]
pub sell_token_balance: SellTokenSource,
#[serde(default)]
pub buy_token_balance: BuyTokenDestination,
/// Full app data JSON. Defaults to `"{}"` if omitted.
#[serde(default)]
pub app_data: Option,
#[serde(default)]
pub interactions: Interactions,
}
```
- [ ] Add exhaustive order details in a follow-up PR.
## How to test
E2E test that runs a custom order simulation on a trader with no funds
(it reverts), then account is funded and the same request passes.
---------
Co-authored-by: José Duarte
Co-authored-by: ilya
* Skip balance check for flashloan orders (#4278)
## Summary
- Flashloan orders get their sell tokens from the flashloan at
settlement time, so they should not be filtered out due to insufficient
user balance
- Removes the restriction that flashloan orders must have the settlement
contract as receiver
- Flashloan orders now bypass balance allocation entirely, similar to
CoW AMM orders
---------
Co-authored-by: José Duarte <15343819+jmg-duarte@users.noreply.github.com>
* Partially filled orders support in simulation (#4306)
# Description
The order simulation endpoint so far always tried to fill the order with
the original 100% fill amount. This leads to reverts if an order was
already partially filled.
# Changes
Fetches the order's fill amount using an RPC call at the given block and
deducts that from the full order amount. This will cause the simulation
to always fill the remaining executable amount.
## How to test
E2E test simulating a partially filled order.
---------
Co-authored-by: José Duarte
Co-authored-by: ilya
Co-authored-by: MartinquaXD
* Add global query timeout to SELECT queries (#4272)
# Description
Following the issues we faced with RDS, and the fact that [SQLx does not
provide global
timeouts](https://github.com/launchbadge/sqlx/issues/3060), this PR uses
PostgreSQL's native `statement_timeout` to limit the duration of read
queries on the **orderbook's read replica**.
Instead of wrapping every query on the client side, the timeout is set
once per connection via the pool's `after_connect` hook. This means
every query issued through that pool is automatically subject to the
configured timeout — no per-call changes needed.
The timeout is only applied to the **orderbook read replica** pool
(created with `Postgres::try_new_with_timeout`). Write pools and other
services are unaffected.
# Changes
* **`crates/orderbook/src/database/mod.rs`** — Added `statement_timeout`
to `Config` and a new `Postgres::try_new_with_timeout` constructor that
sets `statement_timeout` on every connection via `after_connect`.
Includes a postgres integration test using `pg_sleep`.
* **`crates/orderbook/src/run.rs`** — The read replica pool now uses
`try_new_with_timeout`.
* **`crates/configs/src/database.rs`** — Added `statement_timeout` field
to `DatabasePoolConfig` (defaults to `30s`, deserialized via
`humantime_serde`).
* **`crates/shared/src/arguments.rs`** — Added `--statement-timeout` CLI
flag (used by refunder).
* **`crates/database/src/trades.rs`** — Changed `trades()` from
returning a `BoxStream` to `fetch_all`, since streaming doesn't play
well with connection-level timeouts.
* Minor whitespace cleanups in other `crates/database/src/*.rs` files
and removal of an unrelated stale config section in the playground
autopilot config.
## How to test
Run the integration test against a local postgres (`docker compose up
-d` first):
```
cargo nextest run -p orderbook statement_timeout --test-threads 1 --run-ignored ignored-only
```
---------
Co-authored-by: Martin Magnus
* Fix BalancerV2NoProtocolFeeLiquidityBootstrappingPoolFactory Sepolia block number (#4316)
# Description
Corrects the block number for the given contract on Sepolia
# Changes
* Change the block number
* Advise Claude to use order debug endpoint (#4303)
# Description
We have a new debug endpoint which will cut Claude's investigation time
a lot.
* Refactor contracts crate out of the main folder for faster compilation 🚀 (#4217)
# Description
Replace the `crates/contracts` build.rs-based compile-time code
generation with a standalone code-generation tool that produces
pre-generated per-contract crates. This eliminates the slow build.rs
step from the main workspace build and makes contract bindings explicit,
version-controllable, and independently compilable.
# Changes
* Move `crates/contracts` to top-level `contracts/` directory as a
standalone binary
* Replace build.rs code generation with pre-generated Alloy contract
binding crates under `contracts/generated/`
* Add `contracts-facade` crate that re-exports all generated bindings
for easy consumption
* Update all workspace crates to import from the new generated crates
* Add missing contract artifacts (Balancer factory V3-V6, weighted pool
factory V4, NoProtocolFee LBP factory, DEX router variants)
## How to test
1. `cargo check --workspace --all-targets` — workspace compiles against
the new generated bindings
2. `cargo nextest run` — unit tests pass
3. `cd contracts && cargo run -- --help` — codegen tool runs
independently
4. Verify `contracts/generated/` output matches checked-in code by
re-running the codegen
## Charts
Problematic time blocker:
CPU Graph (notice the 60s):
No more time blocker (doesn't fully fit vertically in my screen):
New CPU Graph (notice the 45s and much better (higher) CPU usage):
---------
Co-authored-by: Claude Opus 4.6 (1M context)
* docs: add onboarding diagrams and entrypoints (#4311)
# Description
Addresses review feedback on #4296.
New contributors need a single place to see how orderbook, autopilot,
driver, solvers, Postgres, and the chain fit together, plus where to
open the codebase for each area. This PR adds `docs/ONBOARDING.md` with
Mermaid diagrams and practical code entrypoints, and links it from
`README.md`.
# Changes
* Add `docs/ONBOARDING.md`: system context diagram, order→auction→settle
sequence diagram, service responsibilities diagram, DB mental model
diagram
* Add "Where to start reading code" with entrypoints pointing to
`run.rs` for each service (orderbook, autopilot, driver, solvers,
contracts, database)
* Add solver types section explaining colocated vs non-colocated
distinction
* Add local development quick-start (playground with `ETH_RPC_URL` note,
cargo check/nextest, formatting)
* Add debugging section linking to `COW_ORDER_DEBUG_SKILL.md`
* Update `README.md` with a link to `docs/ONBOARDING.md`
## How to test
1. Open `docs/ONBOARDING.md` on GitHub and confirm all Mermaid blocks
render (context flowchart, sequence diagram, responsibilities flowchart,
DB flowchart)
2. Click links to `playground/README.md`, `database/README.md`, and
`COW_ORDER_DEBUG_SKILL.md` and confirm they resolve
3. Open `README.md` and confirm the new onboarding link points to
`./docs/ONBOARDING.md`
* Add a timeout to balance override detection (#4317)
# Description
Balance override detection can stall the quote pipeline when probing
certain tokens. Reflection tokens (e.g. LuckyBlock) implement
`balanceOf` by iterating over a storage array in `_getReflectionRate()`.
During strategy verification, we override storage slots with a test
value — if that value lands on an array-length slot, the EVM loops until
the node's execution timeout.
This adds a configurable timeout around the full `detect()` call in
`cached_detection` to prevent slow tokens from blocking quote
processing. The default is 1 second.
# Changes
* Add `detection_timeout` field to `BalanceOverrides` with a default of
1s
* Wrap `detector.detect()` in `tokio::time::timeout` inside
`cached_detection`, treating timeouts as `DetectionError::NotFound`
(which gets cached to avoid retrying)
* Add `detection-timeout-secs` config field to `BalanceOverridesConfig`
so the timeout is tunable per deployment
## How to test
Staging
---
Before applying this
```
jmgduarte@unknown5e8ed84873b2 ~/D/c/infrastructure (staging)> time curl --location 'https://barn.api.cow.fi/bnb/api/v1/quote' \
--header 'Content-Type: application/json' \
--data '{
"sellToken": "0x2cd96e8c3ff6b5e01169f6e3b61d28204e7810bb",
"buyToken": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"from": "0x4EF880525383ab4E3d94b7689e3146bF899A296e",
"receiver": "0x4EF880525383ab4E3d94b7689e3146bF899A296e",
"sellAmountBeforeFee": "243443381571330",
"kind": "sell",
"priceQuality": "optimal",
"validFor": 300,
"appData": "{\"appCode\":\"OneKey CowSwap\",\"environment\":\"production\",\"metadata\":{\"orderClass\":{\"orderClass\":\"market\"},\"partnerFee\":{\"recipient\":\"0x09DDb1031A31Ac82Ef276AB8Ea67c0941ef27c02\",\"volumeBps\":30},\"quote\":{\"slippageBips\":62,\"smartSlippage\":false},\"referrer\":{\"address\":\"0x09DDb1031A31Ac82Ef276AB8Ea67c0941ef27c02\"}},\"version\":\"1.6.0\"}",
"appDataHash": "0x8bc9701f53009567e798a5b879ca06aa849e4b10ada621b7f2d147f9e411d4d8",
"timeout":6000
}'
ERROR: The request could not be satisfied
504 Gateway Timeout ERROR
The request could not be satisfied.
We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
Generated by cloudfront (CloudFront) HTTP3 Server
Request ID: R7hFhywd1QB3QiA7xso829L_FErAgjEvZXCpY3fNa_SGX19Flxfq4g==
________________________________________________________
Executed in 30.20 secs fish external
usr time 16.68 millis 0.41 millis 16.28 millis
sys time 15.25 millis 1.99 millis 13.27 millis
```
After applying this
```
jmgduarte@unknown5e8ed84873b2 ~/D/c/infrastructure (staging)> time curl --location 'https://barn.api.cow.fi/bnb/api/v1/quote' \
--header 'Content-Type: application/json' \
--data '{
"sellToken": "0x2cd96e8c3ff6b5e01169f6e3b61d28204e7810bb",
"buyToken": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"from": "0x4EF880525383ab4E3d94b7689e3146bF899A296e",
"receiver": "0x4EF880525383ab4E3d94b7689e3146bF899A296e",
"sellAmountBeforeFee": "243443381571330",
"kind": "sell",
"priceQuality": "optimal",
"validFor": 300, "appData": "{\"appCode\":\"OneKey CowSwap\",\"environment\":\"production\",\"metadata\":{\"orderClass\":{\"orderClass\":\"market\"},\"partnerFee\":{\"recipient\":\"0x09DDb1031A31Ac82Ef276AB8Ea67c0941ef27c02\",\"volumeBps\":30},\"quote\":{\"slippageBips\":62,\"smartSlippage\":false},\"referrer\":{\"address\":\"0x09DDb1031A31Ac82Ef276AB8Ea67c0941ef27c02\"}},\"version\":\"1.6.0\"}", "appDataHash": "0x8bc9701f53009567e798a5b879ca06aa849e4b10ada621b7f2d147f9e411d4d8",
"timeout":6000
}'
{"quote":{"sellToken":"0x2cd96e8c3ff6b5e01169f6e3b61d28204e7810bb","buyToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","receiver":"0x4ef880525383ab4e3d94b7689e3146bf899a296e","sellAmount":"101408548709609","buyAmount":"19632333521561","validTo":1775660168,"appData":"{\"appCode\":\"OneKey CowSwap\",\"environment\":\"production\",\"metadata\":{\"orderClass\":{\"orderClass\":\"market\"},\"partnerFee\":{\"recipient\":\"0x09DDb1031A31Ac82Ef276AB8Ea67c0941ef27c02\",\"volumeBps\":30},\"quote\":{\"slippageBips\":62,\"smartSlippage\":false},\"referrer\":{\"address\":\"0x09DDb1031A31Ac82Ef276AB8Ea67c0941ef27c02\"}},\"version\":\"1.6.0\"}","appDataHash":"0x8bc9701f53009567e798a5b879ca06aa849e4b10ada621b7f2d147f9e411d4d8","feeAmount":"142034832861721","gasAmount":"235614","gasPrice":"52500001","sellTokenPrice":"0.0870894483162219235072853962265071459114551544189453125","kind":"sell","partiallyFillable":false,"sellTokenBalance":"erc20","buyTokenBalance":"erc20","signingScheme":"eip712"},"from":"0x4ef880525383ab4e3d94b7689e3146bf899a296e","expiration":"2026-04-08T14:53:08.775181109Z","id":24317,"verified":false,"protocolFeeBps":"2"}
________________________________________________________
Executed in 1.51 secs fish external
usr time 14.70 millis 1.25 millis 13.45 millis
sys time 12.12 millis 3.78 millis 8.34 millis
```
* Generate tendery link on simulation (#4320)
# Description
The debug simulation endpoint (/api/v1/debug/simulation/{uid}) currently
returns a raw Tenderly API request object that you have to manually POST
to Tenderly to debug. This adds automatic submission + sharing so the
response includes a clickable tenderlyUrl link.
# Changes
- Add simulate_and_share to the Tenderly Api trait - submits a
simulation, shares it, and returns the public dashboard URL
- Refactor TenderlyApi to store api_base URL instead of the full
/simulate endpoint, appending paths as needed
- Add optional tenderly config to OrderSimulationConfig - when set,
simulations are auto-submitted
- Return tenderlyUrl field in OrderSimulationResult (omitted from JSON
when Tenderly is not configured)
## How to test
I ran the orderbook locally with tenderly config, hit the API and got a
tenderly link.
* [TRIVIAL] Pin Claude workflow actions to full commit SHAs (#4323)
## Summary
Pin `actions/checkout` and `anthropics/claude-code-action` to full
commit SHAs in Claude workflow files, as required by the repo's action
policy.
- `actions/checkout@v4` →
`actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683` (v4.2.2)
- `anthropics/claude-code-action@v1` →
`anthropics/claude-code-action@e0f2d99545298b87c2f984ab534af3a6534142ae`
(v1)
* [TRIVIAL] Redact IPFS auth_token in debug (#4325)
# Description
Fixes https://github.com/cowprotocol/services/issues/4310
This fixes the leakage by redacting the IPFS secret in the Debug
implementation.
# Changes
* Manually implement debug to redact IPFS token
## How to test
Added a test to ensure it doesn't break without us noticing
* Surface transfer simulation revert reasons in order creation API (#4321)
## Summary
- When order creation fails with `TransferSimulationFailed`, the API now
includes the actual revert reason (e.g. `0x5b263df7` =
`LtvValidationFailed()`) instead of the generic "sell token cannot be
transferred"
- Changed `Balances.sol` helper contract to capture revert bytes from
the `transferFromAccounts` try/catch block
- Threaded revert bytes through `Simulation` →
`TransferSimulationError::TransferFailed(Vec)` →
`ValidationError::TransferSimulationFailed(Vec)` → API error
description
- Deployed new Balances contract at
`0x88b4B74082BffB2976C306CB3f7E9093AE48B94F` on all chains (except Lens
which keeps the old deployment)
- Updated e2e forked test block numbers to include the new deployment
## Motivation
Aave aTokens (e.g. aBasUSDC) revert with `LtvValidationFailed()` when a
user has zero-LTV collateral blocking transfers. The current generic
error gives no indication of why the transfer fails, making it very
difficult to debug.
## API Change
Before:
```json
{"errorType": "TransferSimulationFailed", "description": "sell token cannot be transferred"}
```
After (when revert data available):
```json
{"errorType": "TransferSimulationFailed", "description": "sell token cannot be transferred, token reverted with: 0x5b263df7"}
```
The 4-byte selector can be decoded client-side (e.g. `cast 4byte
0x5b263df7` → `LtvValidationFailed()`).
## Changes
- **`contracts/solidity/Balances.sol`** — `catch` → `catch (bytes memory
reason)`, added `transferRevertReason` return value
- **`contracts/artifacts/Balances.json`** — Rebuilt with solc
- **`crates/account-balances/src/lib.rs`** — Added
`transfer_revert_reason` to `Simulation`, changed `TransferFailed` to
carry `Vec`, switched to `abi_decode_params` (required for dynamic
return types)
- **`crates/account-balances/src/simulation.rs`** — Pass revert bytes
into `TransferFailed`
- **`crates/shared/src/order_validation.rs`** — Thread `Vec` through
`TransferSimulationFailed`
- **`crates/orderbook/src/api/post_order.rs`** — Format revert selector
in error description
- **`contracts/src/main.rs`** — Updated Balances addresses to new
deployment `0x88b4B74082BffB2976C306CB3f7E9093AE48B94F`
- **`Justfile`** — Added formatting steps to `generate-contracts`
- **e2e forked tests** — Updated fork block numbers and whale addresses
for new deployment
## New Balances Deployment
Address `0x88b4B74082BffB2976C306CB3f7E9093AE48B94F` on: Mainnet,
Arbitrum, Base, Avalanche, BNB, Optimism, Polygon, Gnosis, Linea, Ink,
Sepolia, Plasma. And also Optimism, since we deployed everything there
already and in case we will add support for this chain sometime later.
Lens keeps the old address
(`0x3e8C6De9510e7ECad902D005DE3Ab52f35cF4f1b`), since it will be dropped
from the codebase in a follow-up PR.
## Test plan
- [x] Existing unit tests pass (account-balances, shared, orderbook)
- [x] Clippy clean
- [x] E2E local node tests pass
- [x] E2E forked node tests pass
- [ ] Manual test: submit order with aToken that has LTV-blocked
transfer, verify revert selector appears in error
* Don't compile contract bindindgs we don't use (#4324)
# Description
Currently many contracts we use have many functions we don't use. Those
result in a lot of code that gets compiled unnecessarily which is slow.
# Changes
I moved the unused functions in the artifact ABI files into under a new
key (`_disabled`) which does not get parsed by `alloy` for code
generation. I decided to do that instead of deleting the functions
entirely in case we need to use some of them in the future.
This resulted in ~180K lines of net reduction. On my machine this
reduced compile times of a clean rebuild from 69s to 63.7s. The effects
on CI are 10s faster compilation of tests and likely significantly more
savings when building the full image.
## How to test
all tests should still pass
* Remove uniform clearing prices from winner selection (#4313)
# Description
Uniform clearing prices (UCP) are no longer part of the core CoW
Protocol scoring mechanism since CIP-67. In winner selection, the UCP
variables were already dead code (`_uniform_sell_price` /
`_uniform_buy_price`). All scoring uses
`calculate_custom_prices_from_executed()` from per-trade executed
amounts instead.
This is the first PR in a series to remove UCP from the entire backend.
It targets only the winner-selection crate and its integration points in
the autopilot, which is low-risk since the code was already unused.
# Changes
* Remove `prices: HashMap` field and `prices()` accessor
from `winner_selection::Solution`
* Remove dead `_uniform_sell_price` / `_uniform_buy_price` lookups in
`compute_order_score()`
* Stop passing clearing prices when constructing `winsel::Solution` in
the autopilot
* Set `clearing_prices` to `Default::default()` in the run loop (kept to
avoid breaking the solver competition API)
* Update test in `settlement/mod.rs` to match new `Solution::new()`
signature
## How to test
1. `cargo nextest run -p winner-selection`
2. `cargo nextest run -p autopilot`
3. `cargo clippy --locked -p winner-selection -p autopilot
--all-features --all-targets -- -D warnings`
## Staging test
| Value | Before | After |
| --- | --- | --- |
| 0.1 |
[0x749d2](https://dev.explorer.cow.fi/orders/0x749d2c5ebf346a47be288f20d96ffab2dcafc2ff48eebccbe8f053f8d9a3832909fbad1ea29c36dfe4f8f7baa87c5edf85e0d9f369d78f53)
|
[0x13873](https://dev.explorer.cow.fi/orders/0x138734c29ac9fff883f5f6784e74a3ed3cbdf82c14b5f7e4a54b08fd04a6f78809fbad1ea29c36dfe4f8f7baa87c5edf85e0d9f369d78ee4)|
* Update claude's log instructions (#4319)
# Description
Instruct Claude to use MPC to access logs instead of using helper
script.
* Add E2E test to ensure flashloan filtering is performed correctly (#4329)
# Description
While reviewing #4309 I noticed a super small bug that would have been a
pain in the ass to debug.
The implemented parallelization strategy changed the order of the
flashloan filter, it essentially was filtering flashloans without full
information on them, meaning some flashloan orders would be sent to
solvers that explicitly don't support them.
This PR adds a test to ensure it doesn't break unexpectedly
# Changes
* Add flashloan support configuration to driver tests
* Add test to ensure flashloans are correctly filtered
## How to test
Run test as is and merge this PR's branch into
https://github.com/cowprotocol/services/pull/4309 and check it fails
* Support reading TenderlyConfig api_key from environment variable (#4332)
# Description
The `TenderlyConfig.api_key` field currently deserializes as a plain
string from TOML config. This means it cannot use the `%ENV_VAR` pattern
to read secrets from environment variables at runtime, unlike
`CoinGeckoConfig.api_key` which already supports this.
Since PR #4225 moved price estimation into a separate crate and removed
the old CLI `--tenderly-*` arguments, the only way to configure Tenderly
for the trade verifier is via the TOML `[price-estimation.tenderly]`
section. Without env var support on the `api-key` field, the API key
would need to be hardcoded in the ConfigMap, which is a security
concern.
# Changes
- Added `deserialize_string_from_env` to `TenderlyConfig.api_key` so it
supports the `%ENV_VAR` pattern (same as `CoinGeckoConfig.api_key`)
# How to test
Existing tests.
* Hide competition until deadline passes (#4330)
# Description
Hides solver competition API data until the auction's submission
deadline block has passed. Feature-gated via
hide-competition-before-deadline (default off) to avoid breaking
external solver monitoring that depends on these endpoints.
# Changes
- Added hide-competition-before-deadline bool to orderbook config
(default false)
- Wired CurrentBlockWatcher into AppState so handlers can check the
current block
- Return 404 while deadline hasn't passed
- E2E test updated to exercise both the 404 and the post-deadline
visibility
## How to test
```
cargo test -p e2e 'solver_competition::local_node_solver_competition' -- --exact --ignored
```
---------
Co-authored-by: Martin Magnus
* Fix RUSTSEC issues (#4334)
# Description
Fixed (vulnerabilities):
- RUSTSEC-2026-0098 & RUSTSEC-2026-0099: rustls-webpki 0.103.10 →
0.103.12 (lockfile update only)
Fixed (unsound warning):
- RUSTSEC-2026-0097: rand 0.9.2 → 0.9.4 (lockfile update only)
- RUSTSEC-2026-0097: Workspace rand dependency bumped from 0.8.5 → 0.9.4
in Cargo.toml, with code updates to use the new API (thread_rng() →
rng(), gen_range() → random_range())
* Bump alloy crates from 1.7.3 to 1.8.3 (#4333)
Checked latest versions available for all alloy and sub dependencies.
Bumps all alloy workspace dependencies to their latest 1.x versions:
alloy, alloy-consensus, alloy-contract, alloy-eips, alloy-json-rpc,
alloy-network, alloy-provider, alloy-rpc-client, alloy-rpc-types,
alloy-rpc-types-eth, alloy-rpc-types-trace, alloy-signer,
alloy-signer-local, alloy-transport, alloy-transport-ws: 1.7.3 → 1.8.3
alloy-primitives: 1.5.2 → 1.5.7
alloy-sol-types: 1.5.2 → 1.5.7
alloy-dyn-abi, alloy-json-abi were already at latest (1.5.7)
Separated from #4205 (pod network integration) PR to isolate the
dependency upgrade.
* Respect settle queue size (#4338)
# Description
The reference driver rejects new solutions when there is already a
backlog of solutions that still need to be submitted because they will
most likely not be mined in time. This is intended to protect very
competitive solvers from penalties when they win too much but can't
submit fast enough.
https://github.com/cowprotocol/services/pull/4167 introduced a bug where
the check whether to reject the `/solve` request only looks at the
available tx submission slots but not the settle queue.
This has the consequence that a solver with only a single submission EOA
that won an auction will reject `/solve` requests until the previous
solution was submitted.
# Changes
Add a semaphore with capacity equal to queue size to mimic missing queue
behavior.
---------
Co-authored-by: Martin Magnus
* Use a common prefix for internal endpoints (#4339)
# Description
We now have a few endpoints that we don't want to expose to the public
and every single one of them has a) a rule in WAF b) a rule on the infra
level that exposes it to partners with an API key.
Instead of setting these every time we create a new internal endpoint we
can use the same rules for all endpoints with the `/api/internal`
prefix.
# How to test
Existing e2e tests.
* Workflow to test contract generated code (#4336)
# Description
Adds a CI job to ensure that generated contract code was *just*
generated
# Changes
* CI job to detect manual tampering of generated code
## How to test
There are commits associated with this PR that should launch jobs that
will fail or pass, will add them here as they're done
"Successful failure" — i.e. detected changes:
https://github.com/cowprotocol/services/actions/runs/24463810679/job/71485172786?pr=4336
Successful success — i.e. no changes = nothing detected:
https://github.com/cowprotocol/services/actions/runs/24464073112/job/71486114618?pr=4336
---------
Co-authored-by: Jan [Yann] <4518474+fafk@users.noreply.github.com>
* Add internal solver competition endpoint (#4335)
# Description
In https://github.com/cowprotocol/services/pull/4330 we started hiding
auctions until their deadline passed. Our solver team however needs to
have access to the unfiltered data, so this PR adds and endpoint that
returns it and we're going to restrict access to it on the infra level.
---------
Co-authored-by: Aryan Godara <65490434+AryanGodara@users.noreply.github.com>
Co-authored-by: Martin Magnus
* Add EIP-4626 native price estimator (#4243)
# Description
Adds a native price estimator for EIP-4626 vault tokens (e.g. sDAI,
wrapped yield vaults).
Many vault tokens lack direct DEX liquidity, causing native price
estimation to fail. This estimator unwraps the vault by querying the
on-chain `asset()` and `convertToAssets()` functions, then delegates
pricing of the underlying token to the next estimator in the stage.
# Changes
* **New `Eip4626` native price estimator**
(`crates/price-estimation/src/native/eip4626.rs`):
calls `asset()` + `decimals()` in parallel, then
`convertToAssets(10^decimals)` to compute the
shares-to-assets conversion rate, and multiplies by the inner
estimator's price for the
underlying token.
* **Negative cache for non-vault tokens**: tokens whose `asset()` call
reverts are remembered in
a `Mutex>` so subsequent requests skip the RPC
entirely. Cleared on process
restart.
* **Timeout budget forwarding**: each vault RPC call is individually
bounded by
`tokio::time::timeout`, and whatever time remains is forwarded to the
inner estimator. This
keeps the total wall-clock time within the caller's original timeout,
which matters for
recursive vault chains.
* **Configurable recursion depth**: the `Eip4626` config variant accepts
a `depth` parameter
(default: 1) controlling how many nested vault layers to unwrap. In the
factory, `depth` layers
of `Eip4626` wrap the next estimator in the stage.
* **Config validation**: `NativePriceEstimators` deserialization rejects
stages where `Eip4626` is
the last entry (it must be followed by another estimator to price the
underlying asset).
* **Contract bindings**: added `IERC4626` interface and
`MockERC4626Wrapper` test contract for
e2e tests.
* **Factory wiring** (`crates/price-estimation/src/factory.rs`):
`create_native_estimator` now
consumes the next estimator from the stage iterator when it encounters
`Eip4626`, wrapping it
in `depth` layers of instrumented `Eip4626` estimators.
* **Re-added config deserialization tests** to
`crates/configs/src/native_price_estimators.rs`
that were lost during the extraction from `price-estimation` to
`configs`.
## How to test
1. Unit tests: `cargo nextest run -p price-estimation eip4626` and
`cargo nextest run -p configs native_price_estimators`
2. Live mainnet smoke test (requires `NODE_URL`): `NODE_URL=... cargo
nextest run -p price-estimation -- eip4626 --run-ignored ignored-only`
3. E2e forked tests (requires `FORK_URL_MAINNET`):
- Single vault: `cargo nextest run -p e2e
forked_node_mainnet_eip4626_native_price --test-threads 1 --run-ignored
ignored-only`
- Recursive vaults: `cargo nextest run -p e2e
forked_node_mainnet_eip4626_recursive_native_price --test-threads 1
--run-ignored ignored-only`
---------
Co-authored-by: Claude Sonnet 4.6
Co-authored-by: José Duarte
Co-authored-by: José Duarte <15343819+jmg-duarte@users.noreply.github.com>
* [Driver] Add SettlementStarted solver notification (#4327)
# Description
## Context
Some PMMs benefit from knowing that their quotes will be used in
settlement as early as possible because they can hedge earlier, manage
their risks better, and as a result provide better prices. The example
would be #3452 feature request from Liquorice PMM - they solved their
problem in PR #3451 by implementing a notification system that can
notify PMM directly from driver. However, this approach requires PMMs to
be involved in pushing a PR to cowprotocol, which is not always
possible/feasible/desirable.
## Solution
This PR introduces a new solver notification called SettlementStarted,
that fires off whenever a solver has won and the settlement of its
solution is about to start.
# Changes
`crates/solvers-dto`
* `notification::Kind::SettlementStarted` was added.
`crates/driver`
* `infra/notify/notification.rs` - domain notification kind
`Kind::SettlementStarted` was added.
* `infra/solver/dto/notification.rs` - a mapping from `driver` domain to
`solvers-dto` notification kind was added.
* `infra/notify/mod.rs` - function `settlement_started` was added, that
fires-and-forgets the named notification.
* `domain/competition/mod.rs` - a `notify::settlement_started()` call
was added right before trying to settle the solution.
## How to test
I found no existing notification testing system, so I decided I am not
the one to include that. However, it's possible to do in e2e tests by
setting up a driver, a solver, calling driver's `settle` with the
solver's name on it and look for the notification to be received on the
solver's side.
## Related Issues
Implements #4326
Co-authored-by: Haris Angelidakis <64154020+harisang@users.noreply.github.com>
* Correctly encode approval interactions for USDT-like tokens (#4354)
# Description
Alternative to https://github.com/cowprotocol/services/pull/4340
USDT is a bit special because it is one of very few tokens where the
`approve()` function requires you to set the allowance back to 0 before
you can alter it again to avoid a vulnerability (see
[here](https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729)).
# Changes
This PR adjusts the driver's approval encoding logic such that it checks
whether the regular `approve()` call would revert. In case that happens
it encodes an `approve(0)` and `approve(desired_value)` to be compatible
with this security measure / quirk.
That way we support all those tokens on all chains without needing any
extra configuration parameters or hardcoded values. The downside is 1
extra RPC call every time we have to increase an approval which is
extremely rare so it's fine.
## How to test
Converted an existing `USDC -> USDT` order fork test to be a `USDT ->
USDC` test. This test fails without the PR's change.
* Use inline PR review comments from Claude code review (#4356)
# Description
The Claude code-review action currently posts one big summary as an
issue comment (example:
https://github.com/cowprotocol/services/pull/4355#issuecomment-4291257773).
The `code-review` plugin has a `--comment` flag that switches it from
the summary-text mode to posting one PR review comment per issue
anchored to the exact line in the diff, matching how
`gemini-code-assist[bot]` already behaves. Per the plugin spec (step 9),
this flag triggers `mcp__github_inline_comment__create_inline_comment`
instead of a single `gh pr comment`.
# Changes
- Append `--comment` to the `/code-review:code-review` prompt in
`.github/workflows/claude-code-review.yml`.
# How to test
Run the `claude /review` command.
* Bump rustls-webpki to 0.103.13 (RUSTSEC-2026-0104) (#4357)
## Summary
- `cargo audit` is currently failing on `main` due to
[RUSTSEC-2026-0104](https://rustsec.org/advisories/RUSTSEC-2026-0104) —
a reachable panic in `rustls-webpki`'s CRL parsing (affected:
`0.103.0..0.103.13`).
- `rustls-webpki` is a transitive dep (via `rustls-platform-verifier` →
`reqwest`); no direct manifest bump is needed. Ran `cargo update -p
rustls-webpki --precise 0.103.13` to move the lockfile from `0.103.12` →
`0.103.13`.
- While re-resolving, cargo also deduped a few consumers onto
`windows-sys 0.60.2` and `syn 1.0.109`, both of which already existed in
the lockfile on `main` — no new crate versions were introduced.
## Test plan
- [ ] CI green
* Support Aave v3 aToken balance overrides (#4345)
# Description
Quote verification was silently failing for any Aave v3 aToken as the
sell token (e.g. aEthWETH → WETH) because the balance-override mechanism
assumes the value at the balance storage slot is what `balanceOf`
returns. Aave v3 aTokens break both assumptions: `balanceOf` applies a
`rayMul(scaled, liquidityIndex)` scaling, and storage is packed
`UserState { uint128 balance; uint128 additionalData }`. The
auto-detector's verify step therefore never matched, returned
`NotFound`, and the trade verifier silently skipped the override,
producing the production revert `execution reverted: trader does not
have enough sell token` visible in barn logs for aEthWETH quotes today
(reproduced on Tenderly:
https://dashboard.tenderly.co/cow-protocol/barn/simulator/1e69fa91-9496-44d1-9aec-a0e34166f9df).
# Changes
- New `Strategy::AaveV3AToken { target_contract, pool, underlying,
map_slot }` variant in `configs::balance_overrides::Strategy` and a
corresponding async resolver on `BalanceOverrides` that fetches the
current `getReserveNormalizedIncome` from the Aave v3 Pool, rayDivs the
requested amount (round-half-up, bit-for-bit compatible with
`WadRayMath.rayDiv`), and writes it into the low 128 bits of the packed
`_userState` slot.
- Auto-detector is now Aave-aware: the detector probes the token with
`UNDERLYING_ASSET_ADDRESS()` + `POOL()` and then calls
`pool.getReserveData(underlying)` and verifies the returned
`aTokenAddress` equals the probed token — an identity check that only
passes for tokens the pool itself has registered as an aToken for their
underlying, preventing rogue contracts that merely implement the aToken
selectors from being accepted. When the probe succeeds, mapping-style
slots are also offered as `AaveV3AToken` candidates and verified with a
1-wei round-trip tolerance instead of strict equality. No hardcoded
per-token list is needed. aEthWETH and every other Aave v3 aToken on
every chain (mainnet, Arbitrum, Base, Gnosis, Polygon, BNB, Linea,
Plasma, Ink, Avalanche, etc.) are picked up automatically the first time
they're quoted.
- Shared Aave math lives in a new `balance-overrides::aave` module so
the production override builder and the detector probe/verify use
identical arithmetic.
- `trade_verifier::prepare_state_overrides` now emits `tracing::warn!`
when the spardose balance override for the sell token can't be resolved
— mirroring the existing warn on the buy-side path so future missing
overrides surface in logs instead of only showing up as downstream
reverts.
# Aave v4 note
Aave v4's user-facing deposit receipt is `TokenizationSpoke`, an
ERC-4626 vault built on OpenZeppelin's `ERC20Upgradeable` — not a scaled
aToken. `balanceOf` is the plain OZ `_balances[user]` mapping (no
`rayMul` scaling), and the contract doesn't expose
`UNDERLYING_ASSET_ADDRESS()` or `POOL()`. Our probe therefore correctly
rejects v4 Spokes and the detector falls through to the existing
`SolidityMapping` / `DirectSlot` heuristics, which handle them as
standard ERC-20s. No v4-specific work is needed here.
Source:
# How to test
Unit tests:
- `balance-overrides::tests::a_token_balance_override_bug_reproduction`
— pins the arithmetic: writing the raw amount (what the old strategies
do) makes `balanceOf` return `rayMul(amount, index)` (off by ~6e16 wei
at aEthWETH's current index); writing `rayDiv(amount, index)`
round-trips within 1 wei.
- `balance-overrides::aave::tests` — mock-provider tests for the probe:
accepts a valid aToken, rejects when either selector reverts, rejects
when the claimed pool doesn't look like Aave v3, rejects when the pool
registers a *different* aToken for the declared underlying.
-
`balance-overrides::tests::aave_v3_a_token_override_scales_amount_and_writes_low_128`
— mock-provider integration test for the override builder.
e2e local + forked node tests:
- `balance-overrides::detector::tests::detects_aave_v3_a_token_mainnet`
— asserts the detector returns `AaveV3AToken { pool=0x87870bca…4fa4e2,
underlying=WETH, map_slot=52 }` for aEthWETH.
- `balance-overrides::tests::aave_v3_a_token_override_mainnet_roundtrip`
— applies the override via `eth_call` against real aEthWETH and asserts
`balanceOf(holder) ≈ amount`.
- `e2e::quote_verification::forked_node_mainnet_aave_atoken_quote` —
same round-trip against an anvil mainnet fork, exercising the full
`BalanceOverrides::state_override` path.
# Follow-up items
- **Registry-based detection.** The current probe costs 3 `eth_call`s
per cold-cache token. An alternative is to enumerate all reserves once
per chain from Aave's `AaveProtocolDataProvider` (or equivalent), cache
the full list of aTokens, and do a pure `HashMap` lookup on each quote.
That would make detection amortised O(1) and provide the strongest
identity guarantee (taken from Aave's own registry), at the cost of
introducing a per-chain constant for the DataProvider address, a refresh
cadence for new markets, and handling multiple Aave v3 markets per chain
(e.g. mainnet has Ethereum + Prime). Probably worth doing once aToken
quote volume warrants the optimisation.
- **Cache the accrued liquidity index for ~1 block.** Each aToken quote
currently re-fetches `getReserveNormalizedIncome`. The index drifts
slowly (fractions of a wei per block), so caching for 6–12 s would drop
the per-quote cost to zero without meaningful accuracy loss.
- **Aave v2 support.** Same scaling + packed-storage shape; different
`LendingPool` interface. v2 is deprecated but still has markets; worth
revisiting if any start to attract volume.
* Include block number in logged Tenderly simulation command (#4359)
# Description
The Tenderly simulation command logged during quote verification cannot
be replayed as-is: Tenderly rejects it with `Transaction index is not
allowed when block number is pending`. The verifier passed `block: None`
to `log_simulation_command`, which leaves `block_number` null in the
JSON body (Tenderly treats this as pending) while `prepare_request`
still set `transaction_index: -1`, and that combination is invalid. On
top of that, `simulate_swap_with_solver` did not pin `.call()` to a
specific block, so the node picked "latest" at request time and the
logged block could diverge from what was actually simulated.
# Changes
- `simulate_swap_with_solver` now takes the block as a parameter and
pins `.call()` to it. The caller (`trade_verifier`) snapshots
`current_block` once and passes the same value to the simulator and to
`log_simulation_command`, so the gas-price computation, the simulation,
and the logged curl all reference identical chain state.
- `log_simulation_command` and `prepare_request` now require a `BlockNo`
(no longer `Option`), reflecting that every caller already
supplies one and eliminating the pending-block edge case at the type
level.
# How to test
Existing tests. After deploy, copy the curl command from the
quote-verification log and run it — Tenderly should return a simulation
instead of the validation error, and the result should match the
driver's simulation for that block.
* Fix EIP-4626 contract revert classification (#4360)
# Description
Testing the Euler vault tokens I found that the revert condition is a
bit too strict for the Eip4626 purposes and it would think that the
underlying asset was *not* valid because `asset()` failed; even though
that's the expected behavior.
This PR adds a new condition for a revert caused by a lack of selector,
specifically for this case.
Tested in staging, results can be seen in —
https://victorialogs.dev.cow.fi/goto/ffjuyxx1tk6psc?orgId=1
native_price requests were done for
`0x53afe3343f322c4189ab69e0d048efd154259419`
# Changes
* More logs, helps tracing through the layer peeling
* Less strict variant of is_contract_error, including empty reverts as
contract errors
## How to test
Call the native_price endpoint with a Euler vault address (ensure that
staging has them enabled)
* Add uni v3 defaults on gnosis chain (#4350)
# Description
By now there is an official uniswap v3 deployment on gnosis chain so we
can now add all the default values. Values were taken from
[here](https://gov.uniswap.org/t/official-uniswap-v3-deployments-list/24323/3#p-53385-gnosis-7).
Note, that uniswap v3 so far was manually configured in the driver but
having defaults for all those contracts is just nicer.
This issue was surfaced by @daveai on slack.
# Changes
- added addresses for router, quoter, and factory
- also re-generated the rust code
- added uni v3 to list of default liquidity sources (this is actually
not used anymore and should be removed but since it makes more sense to
delete it in a follow up PR it seemed proper to still add the value for
gnosis to not leave the code base in an inconsistent state - it's just 1
line anyway)
* Overshoot Spardose fake balance by 1% (#4362)
# Problem
Quote verification for small aToken sell amounts intermittently failed
in prod with `execution reverted: trader does not have enough sell
token`: [0.1 aEthWETH
quote](https://victorialogs.dev.cow.fi/explore?schemaVersion=1&panes=%7B%22vdl%22%3A%7B%22datasource%22%3A%22vm-auth-prod%22%2C%22queries%22%3A%5B%7B%22refId%22%3A%22A%22%2C%22datasource%22%3A%7B%22type%22%3A%22victoriametrics-logs-datasource%22%2C%22uid%22%3A%22vm-auth-prod%22%7D%2C%22editorMode%22%3A%22code%22%2C%22expr%22%3A%22container%3A%21controller%20AND%20network%3Amainnet%20AND%20all%3A40880b4ceb2f4dbe7a25aa1877279ddd%22%2C%22queryType%22%3A%22range%22%7D%5D%2C%22range%22%3A%7B%22from%22%3A%221776965400000%22%2C%22to%22%3A%221776965700000%22%7D%2C%22panelsState%22%3A%7B%22logs%22%3A%7B%22visualisationType%22%3A%22logs%22%7D%7D%2C%22compact%22%3Afalse%7D%7D&orgId=1)
failed, [1 aEthWETH
quote](https://victorialogs.dev.cow.fi/explore?schemaVersion=1&panes=%7B%22vdl%22%3A%7B%22datasource%22%3A%22vm-auth-prod%22%2C%22queries%22%3A%5B%7B%22refId%22%3A%22A%22%2C%22datasource%22%3A%7B%22type%22%3A%22victoriametrics-logs-datasource%22%2C%22uid%22%3A%22vm-auth-prod%22%7D%2C%22editorMode%22%3A%22code%22%2C%22expr%22%3A%22container%3A%21controller%20AND%20network%3Amainnet%20AND%20all%3A98c568a44d1b6ce7ea068648fdfc7c94%22%2C%22queryType%22%3A%22range%22%7D%5D%2C%22range%22%3A%7B%22from%22%3A%221776965400000%22%2C%22to%22%3A%221776965700000%22%7D%2C%22panelsState%22%3A%7B%22logs%22%3A%7B%22visualisationType%22%3A%22logs%22%7D%7D%2C%22compact%22%3Afalse%7D%7D&orgId=1)
minutes earlier passed.
aToken does not store a balance directly. It stores a deposit and a
growth factor, where `balanceOf() = deposit * growth_factor`. The factor
ticks up every second as interest accrues.
Quote verification writes a fake deposit into the Spardose (our donor
contract) so the sim can pretend the trader has funds. The old code
sized the fake deposit from a pre-sim `getReserveNormalizedIncome` RPC
read. The sim then re-read the growth factor inside the EVM at its own
pinned block. Those two reads can disagree by one block, leaving the
Spardose's `balanceOf` one wei below `amount` when it tries to fund the
trader. Aave's internal scaled-balance subtraction underflows, revert.
The same kind of boundary issue could in principle hit other tokens
(rebasing, tiny fee-on-transfer, future weird ones).
# Fix
Bump the Spardose's fake balance by 1% before passing it to the
override:
```
spardose_amount = needed + needed / 100
```
Spardose ends up slightly richer than the sim will ever transfer. Any
rounding, accrual, or per-block drift is absorbed by the buffer. The
Spardose is a throwaway donor, overshoot costs nothing: no gas
difference, no side effects, only the trader-requested `amount` actually
moves.
Generic by construction. Fixes aToken and covers any future token with
similar near-boundary math.
# Context
Supersedes #4361, which took an Aave-specific approach (scale against
the stored `liquidityIndex` instead of the accrued one). Replaced with
this generic overshoot per [Martin's
review](https://github.com/cowprotocol/services/pull/4361#pullrequestreview-4168763147).
# Changes
- `price-estimation/trade_verifier`: 1% overshoot on the amount passed
to the Spardose balance override.
- Unit test covering the overshoot helper.
# How to test
`cargo test -p price-estimation trade_verifier`. Existing tests pass
plus the new `spardose_amount_applies_1pct_overshoot`.
* Propose multiple winning solutions in the driver (#4267)
# Description
The driver currently proposes only the single highest-scoring solution
to the autopilot. With EIP-7702 parallel submission in place, the
autopilot's combinatorial auction can now benefit from receiving all
valid solutions from a driver to find the optimal set of winners.
# Changes
[x] Driver's solve() now returns Vec instead of Option
with all valid solutions sorted best-first
[x] Block re-simulation loop now monitors all proposed solutions
individually, voiding only those that revert
[x] New per-solver config flag propose-all-solutions (default: false)
keeps existing behavior until EIP-7702 infrastructure is ready
## How to test
```
cargo nextest run -p driver --test-threads 1 --run-ignored ignored-only -E 'test(multiple_solutions)'
```
To enable in production, add to the solver config:
`propose-all-solutions = true` (requires submission-accounts to also be
configured along with the forwarder contract).
* fix(playground): repair local compose config; prettier `test_playground.sh` output (#4352)
# Description
Fix the local playground setup so the Docker stack starts cleanly and
`playground/test_playground.sh` works end to end again.
This was needed because several local-only config mismatches had
accumulated:
- `tempo` was crashing on startup because `playground/tempo.yaml` used
old config fields that the current `grafana/tempo:latest` image no
longer accepts
- `orderbook` was not reachable correctly because wrong config was being
loaded
- `autopilot` was missing the local database and EthFlow config needed
to pick up and process the onchain test order
- `driver` was trying to reach `orderbook` on the wrong internal port
Less importantly, `test_playground.sh` had rough edges in its output and
did not print the settlement transaction hash after a successful run.
## Error details seen locally
These are the main errors that showed up while debugging:
### 1. Tempo / tracing startup failure
`driver` was logging OpenTelemetry export failures like:
```text
BatchSpanProcessor.ExportError ... error="Operation failed: code: 'The service is currently unavailable', message: \"dns error\", source: tonic::transport::Error(Transport, ConnectError(ConnectError(\"dns error\", Custom { kind: Uncategorized, error: \"failed to lookup address information: Name or service not known\" })))"
```
This looked like DNS, but the real issue was that `tempo` never came up
because its config was invalid for the current image.
### 2. Early readiness / connection reset failures
Running the playground test initially failed during readiness checks
with:
```text
curl: (56) Recv failure: Connection reset by peer
```
This came from `orderbook` not starting correctly and from an incorrect
config being passed to it.
### 3. Autopilot startup crash
Before the local config was fixed, `autopilot` crashed during startup
with a panic around:
```text
thread 'main' panicked at crates/autopilot/src/run.rs:185:6
```
This was caused by missing database configuration in the local
playground config.
### 4. Driver could not talk to orderbook internally
When orders started reaching the solver path, `driver` still failed to
fetch app data because it was calling `orderbook` on the wrong internal
port due to the wrong config:
```text
failed to fetch app data ... err=Http("error sending request for url (http://orderbook/api/v1/app_data/...)")
```
### 5. Solve request timing mismatch
`autopilot` would submit a solve request, `driver` would compute and
score a valid settlement, but `autopilot` would still time out waiting
for the response. The visible symptom was:
```text
solver didn't provide solutions err=Failure(send
0: error sending request for url (http://driver/baseline/solve)
```
The root cause was that the default local solve deadline was too long
for this playground test flow, so `driver` kept the solve request open
much longer than the script expected.
# Changes
* Docker
* Update `playground/tempo.yaml` to the config format accepted by the
current Tempo image
* Remove obsolete Tempo config sections and add the expected local trace
storage/WAL paths
* Add shared node configuration to `playground/configs/orderbook.toml`
* Fix the `orderbook` config being passed to it
* Add database configuration to `playground/configs/autopilot.toml`
* Add local EthFlow contract configuration to
`playground/configs/autopilot.toml`
* Set a short local `solve-deadline` in
`playground/configs/autopilot.toml` so the playground test does not wait
on production-style timing
* `test_playground.sh`
* Extend `playground/test_playground.sh` to print the settlement
transaction hash after success
* Extend `playground/test_playground.sh` to print a ready-to-run `cast
receipt` command and an Otterscan transaction URL
* Clean up `playground/test_playground.sh` status output so expected
pre-indexing `404` responses are shown as `indexing`
## How to test
1. Start the local playground stack with the fork compose file:
`docker compose -f playground/docker-compose.fork.yml up -d`
2. Run the smoke test:
`cd playground && ./test_playground.sh`
3. Confirm the status progresses through local indexing / execution
states and ends in `traded`
4. Confirm the script prints:
- the settlement transaction hash
- a `cast receipt ... --rpc-url http://localhost:8545` command
- an Otterscan URL for the transaction
5. Optionally verify the settlement manually with the printed `cast
receipt` command or by opening the printed Otterscan URL
* Fix remaining sell error reporting for order simulation (#4364)
# Description
Simulating fully filled order (the remaining amount equals 0) errors out
when creating NonZeroU256 from said amount. The error message is
incorrect, as it uses order.data.sell_amount instead of the
remaining_sell which is actually used.
# Changes
Change the error message to properly reflect which value is being used.
## How to test
Query any filled order and observe correct error message.
* Log driver API request deserialization errors (#4358)
# Description
Axum returns a terse 400 when a request body or query string fails to
deserialize, which makes malformed caller payloads invisible in
production.
# Changes
- Added `LoggingJson` and `LoggingQuery` extractors that emit a
`tracing::warn!` with the serde error and the target type, then delegate
to axum's stock rejection (HTTP response shape unchanged).
- Wired the new extractors into `/settle`, `/reveal`, and `/quote`.
- Added a `tracing::warn!` on `/solve` body parse failures in
`pre_processing.rs`.
# How to test
Existing tests.
* Make driver access list fetch optional (#4353)
# Description
The driver currently aborts the whole settlement whenever
`simulator.access_list` fails. The access list is only functionally
required for trades that send ETH to a smart-contract receiver (the EVM
hard gas limit bypass described at `settlement.rs` line 140). For every
other settlement it is just a gas optimization, so a failed RPC should
not cost the solver the auction.
# Changes
- Access list is fetched best-effort when the partial access list is
empty (no ETH->contract trade). On a non-revert failure (transport,
deserialization, etc.) the driver now logs a warn and falls back to the
empty partial list instead of aborting the settlement.
- Revert errors are always propagated, even with an empty partial list,
since they signal a real problem with the settlement.
# How to test
Existing tests.
* Classify EVM InvalidFEOpcode halts as contract reverts (#4365)
# Description
`is_contract_revert` failed to recognize EVM halts (like the
`INVALID`/0xFE opcode older Solidity contracts emit on a missing
selector) as contract-level rejections. anvil/revm surface these as `EVM
error ` JSON-RPC errors, with no revert data and no "revert"
in the message — so calls that deterministically fail at the bytecode
level (e.g. `asset()` on Bancor BNT) were misclassified as transient
transport failures.
In the EIP-4626 native price estimator this meant such tokens were never
pinned as non-vault, so every native-price request triggered a fresh RPC
round-trip that was guaranteed to fail.
Extra context: I got a list of the top 150 tokens in Ethereum through
Dune, ran the asset call against them and basically summed up the
responses here. Older contracts fail with this InvalidFEOpcode, which is
what currently blocks GNO from being quoted in staging (i.e. when
eip4626 is enabled)
# Changes
* Extend `is_contract_revert` to match the `InvalidFEOpcode` error —
every halt is a deterministic contract-level rejection, not a transport
issue to retry.
* Add a unit test (`contract_revert_accepts_evm_halt_errors`) covering
`InvalidFEOpcode`, `OpcodeNotFound`, and `InvalidJump`.
* Add a forked-mainnet test that calls `asset()` across a real EIP-4626
vault (sUSDe) and several non-vault shapes — USDC (empty revert), WETH /
stETH (plain reverts), and GNO / BNT (INVALID opcode) — asserting each
non-vault is correctly classified as a contract revert.
* Add `BNT`, `stETH`, and `sUSDe` to `testlib::tokens` alongside the
existing mainnet addresses; the new test consumes them from there.
## How to test
1. Unit tests: `cargo nextest run -p ethrpc contract_revert`
2. Forked test (requires mainnet fork URL):
```
FORK_URL_MAINNET= cargo nextest run -p e2e
forked_node_mainnet_asset_call_is_contract_revert
--test-threads 1 --run-ignored ignored-only --failure-output final
3. Staging
Note, this is reproducible in staging, try trading a GNO token for
example and you'll see liquidity errors.
* Buy orders with same sell buy token (#4274)
# Description
Enable sell=buy handling for native-equivalent trades by treating native
wrapped token to ETH marker as same-token during order validation.
This is needed because the conversion path already exists downstream,
but validation previously rejected these orders early.
# Changes
* Updated same-token validation logic to consider native wrapped token
sell + ETH marker buy as same-token for policy evaluation.
* Preserved existing policy behavior: allow-sell permits Sell orders,
while Buy orders remain rejected.
* Added unit test coverage for native-equivalent same-token cases under
both disallow and allow-sell behavior.
* Added e2e coverage for:
* native-equivalent Sell quote/order success
* native-equivalent Buy quote rejection under allow-sell policy
## How to test
1. `cargo nextest run -p shared pre_validate_err
pre_validate_same_tokens_allow_sell`
2. `cargo nextest run -p e2e
local_node_native_same_token_sell_with_eth_buy_marker
local_node_native_same_token_buy_with_eth_buy_marker_rejected
--test-threads 1 --run-ignored ignored-only --failure-output final`
## Related Issues
Fixes #4053
---------
Co-authored-by: Marcin Szymczak
* [TRIVIAL] Drop Claude Code workflows (#4381)
The currently configured Claude code review workflow burns a lot of
tokens. This requires investigating the usage and adjusting the jobs.
Meanwhile, the job is dropped to avoid failing CI noise, since the API
key balance remains 0 until this is sorted out.
* Add Bitget buy-order support via reverse-quote endpoint (#4378)
# Description
Bitget's `/swapr` endpoint supports buy quotes (`requestMode =
"minAmountOut"`) by running a recursion server-side on top of sell
quotes. Wiring this up unlocks Bitget as a native-price source for the
long tail of tokens that other estimators cover poorly. Today the
integration only supports sell orders.
The reverse-quote on real auction buy orders is correct end-to-end
(positive overshoot accrues to the settlement buffer, the user receives
exactly their signed buy amount, GPv2Settlement does no
expected-vs-actual interaction-output check), but it can cost the user
up to the configured slippage in surplus, so it's gated behind a config
flag and off by default.
# Changes
- New `Side::Buy` code path in the Bitget integration, calling
`/bgw-pro/swapx/pro/swapr` with `requestMode = "minAmountOut"`
- Caps the reported swap output to `order.buy.amount` so CoW exact-out
fulfillment passes
- New `enable-buy-orders` config flag, off by default, gating the buy
path
- `decimal_to_wei` now rounds to the token's precision (Bitget can
return more decimal digits than the token has)
- Rate-limit pause between iterations in the live multi-chain test
# How to test
Existing tests plus new mock + ignored live tests. Run the live one with
credentials:
```
BITGET_API_KEY=... BITGET_API_SECRET=... \
cargo nextest run -p solvers --run-ignored only swap_buy_all_chains
```
* Add parameter to configure `max-quote-timeout` (#4382)
# Description
Originally we introduced the ability to **reduce** the quote timeout
below our default quote timeout as integrators felt our default timeout
was too slow.
Since then the default was lowered further and new tokens were added
which require proprietary integrations which may require a longer
timeout.
# Changes
Added optional `max-quote-timeout` config parameter which defaults to
10s. User provided `timeout` values in `/quote` requests get capped at
that value now instead of our default quote timeout.
## How to test
extended existing unit test for serializing the config files
extended existing e2e test to check that quoting timeouts get enforced
correctly
* Restore Balancer functions used by the gnosis/solvers repo (#4383)
# Description
#4324 moved unused contract functions from `abi` to `_disabled` in the
artifact JSONs to cut compile times. The check was scoped to this repo
and missed the downstream solvers repo
([gnosis/solvers](https://github.com/gnosis/solvers)), which calls five
of the disabled functions:
- `BalancerQueries.queryBatchSwap`
- `BalancerV3BatchRouter.swapExactIn` / `swapExactOut`
- `BalancerV3BatchRouter.querySwapExactIn` / `querySwapExactOut`
After the v2.359.0 bump in solvers, those functions disappeared from the
generated `contracts` crate and the solver stopped compiling. Solvers
worked around it locally with hand-rolled `alloy::sol!` bindings, but
the right home for these is here.
# Changes
Move the five functions from `_disabled` back into `abi` in:
- `contracts/artifacts/BalancerQueries.json`
- `contracts/artifacts/BalancerV3BatchRouter.json`
The hook variants (`swapExactInHook`, `querySwapExactOutHook`, ...) and
other unused entries stay under `_disabled`. No changes elsewhere.
# How to test
- `cargo check --workspace` is green locally.
- After this lands, the local bindings in cowprotocol/solvers can be
removed on the next dependency bump.
* [TRIVIAL] Log original quote when a new one gets computed (#4386)
# Description
Today we debugged an order which expired because it was placed right
before the price changed a lot.
# Changes
Debugging this was quite tedious. To make this simpler we now log the
original and the new quote id when we have to compute a new one.
* Add CoW Protocol quote-verification debug skill (#4369)
# Description
Documents the end-to-end procedure for debugging quote competition
# Changes
- Adds an auto-generated but manually reviewed claude skill that
explains how to debug quote competition given logs and simulation
capabilities.
## How to test
1. Configure [CoW
MCP](https://www.notion.so/cownation/Connecting-to-our-MCP-Gateway-3258da5f04ca8016b709f084e5f6c112)
for claude
2. Tell claude your tenderly api key and rpc url to use (and if not
already, install foundry)
3. Run a few different debug cases and chains (for a given request id,
quote id or token pair for which their was no liquidity)
I also have the services as well as the infrastructure checked out so
that claude can look at the implementation directly (which may help to
do furhter root cause).
---------
Co-authored-by: Claude Opus 4.7 (1M context)
* fix: use checked_* for `random_updated_at` (#4363)
# Description
Fix underflow when subtracting large `Durations` from `Instant` in
`random_updated_at`.
# Changes
- Compute `age` as a percentage of `max_age`
- Use `checked_mul` to avoid overflow when calculating age
- Clamp Instant subtraction underflow to now via
`checked_sub(...).unwrap_or(now)`
- Adds coverage tests
## How to test
cargo nextest run -p price-estimation
---------
Co-authored-by: José Duarte <15343819+jmg-duarte@users.noreply.github.com>
* Enforce EIP-7825 per-tx gas cap on settlement (#4371)
# Description
The driver caps a settlement's gas estimate at half the block gas limit
(e.g. 60M on a 120M block). Fusaka introduced the EIP-7825
per-transaction gas cap of `2^24 - 1 = 16,777,215` on Mainnet; any tx
exceeding this is rejected by the mempool. Without this check a solution
above the cap can still be returned by `/solve` and forwarded to
`/settle`, where it could never be mined. The cap is already enforced on
the quote-verification path (#4261) but was never ported to settlement
submission.
Note: EIP-7825 is not strictly followed by all chains, some chains
picked different per-tx limits (e.g. Arbitrum One uses 32M), so the
driver reuses the existing `tx_gas_limit` config knob (#3780) rather
than hardcoding a single value. Operators set the per-chain ceiling —
`16,777,215` on Mainnet Fusaka, higher elsewhere — and `Gas::new`
enforces `min(block_limit / 2, tx_gas_limit)`.
# Changes
* Plumb the `tx_gas_limit` config value through
`infra::blockchain::Ethereum` (new `tx_gas_limit()` accessor).
* In `Gas::new`, cap the per-settlement maximum at `min(block_limit / 2,
tx_gas_limit)` so over-sized solutions fail fast through the existing
`GasLimitExceeded` error.
* Chains with a block gas limit below `2 * tx_gas_limit` keep the
tighter half-block behaviour.
* Add unit tests covering the configured-cap path, the boundary case
(asserting both `estimate` and the clamped `limit`), the
small-block-limit path, and the non-Fusaka case where the half-block cap
binds.
## How to test
```
cargo nextest run -p driver settlement::tests
```
All four new tests pass; existing driver tests are unchanged.
Fixes #4368
* Pre-cache BUY_ETH_ADDRESS as non-vault (#4390)
# Description
Pre-caches BUY_ETH_ADDRESS as a non-vault token at the EIP-4626
estimator level.
Given that BUY_ETH_ADDRESS does not have code deployed to it, this makes
it a "valid-enough" token to be ignored by EIP-4626 when enabled and
passed on to the rest of the estimation pipeline.
# Changes
* Pre-caches BUY_ETH_ADDRESS as a non-vault token at the EIP-4626
estimator level.
* Adds tests for said usage
## How to test
Regular tests
* Builder based API for `simulator` crate (#4372)
# Description
This new API for the `simulator` crate approaches the problem from the
other side. Instead of starting by making it work first and foremost
with the most complicated use case (i.e. trade verification) and
building the simpler, more common use cases around that this API starts
with the simple stuff and aims to be flexible enough to also support the
more complicated things.
Not only does this lead to a cleaner API (IMO) but also actual feature
improvements. For example the trade verification logic replaces the user
with a helper contract that we puppeteer to set up the necessary
pre-conditions for quote verification. That helper contract makes the
approach fundamentally incompatible with use cases where a
pre-interaction deploys a smart contract that is actually the owner of
the order (we did not have a way to know the state and bytecode of this
helper contract to fall back to).
The new approach now allows us to easily opt-in to each "faking
machinery" individually. So the simulation endpoint will only use
balance overrides and allow listing a random address while the trade
verification can pull out the big guns (many balance overrides, multiple
fake contracts).
Additionally this PR adds the ability to correctly encode flashloans
which was previously not supported by the `simulator` crate.
# Changes
- new builder based API to construct simulations
- replaced all existing use cases of the old API with the new one
- removed the old API (2 files)
- updated the custom order simulation API to provide all the necessary
data to not require the fake EIP 1271 user contract
- this allows simulating orders of counterfactual owners (contracts that
have not been deployed yet)
- replaced `AnyoneAuthenticator` approach with exactly overriding only
the storage slot to allow list a specific address as a solver
> [!IMPORTANT]
> This PR breaks the API for debugging custom orders. Due to supporting
more features the request now also has to contain the `signature`,
`signingScheme`, `feeAmount`, `validTo`, `appData`, and
`partiallyFillable`.
## Things to improve
Ultimately I would like the `simulator` crate also to be the authority
when it comes to encoding the calldata of actual settlements (which is
why it already handles encoding the auction id). However, this is quite
difficult to do nicely because now we have to think about correctly
encoding many prices and managing wrappers and hooks from multiple
orders.
For simplicity sake the builder currently does not concern itself with
that. That's why you can only add wrappers and interactions from 1
appdata string directly and there is no support for encoding prices such
that orders get surplus.
# How to test
updated existing e2e tests (populating the new fields in the custom
order simulation request)
---------
Co-authored-by: squadgazzz
* [TRIVIAL] Configure flashloan router address for all networks (#4397)
# Changes
Configures the flashloan router address which on all networks so that we
don't have to manually configure it in any configuration files for our
real deployments.
* [TRIVIAL] Remove `enforce-when-possible` quote verification mode (#4393)
# Description
`enforce-when-possible` is a quote verification mode that is not used in
practice. In preparation for a larger refactor of the underlying quote
verification logic it makes sense to remove this to reduce the surface
area of code we need to fit the new logic into.
# Changes
- dropped `enforce-when-possible` mode that completely rejected
unverified quotes when the user had the required balance
Co-authored-by: Claude Sonnet 4.6
* Drop tx.origin = 0x0000 bypass for ZeroEx RFQ quotes (#4394)
# Description
We needed to introduce a loop hole to consider some quotes verified even
though the simulation failed. However, for a long time now no solver
actually used this edge case anymore.
# Changes
In order to simplify the quote verification wherever possible this PR
drops this edge case and its test.
---------
Co-authored-by: Claude Sonnet 4.6
* re-generate contracts (#4403)
# Description
Follow up to https://github.com/cowprotocol/services/pull/4397 as that
got merged without having re-generated the contract bindings.
To prevent these issues going forward I added another branch protection
rule to make the contract bindings check required.
# Changes
- generated contract bindings and now the chain id entries show up
* Rename BalanceOverriding trait to StateOverriding (#4395)
# Description
In order to make quote verification compatible with more use cases we
soon need to start computing approval overrides as well. The plan is to
expose both functions from the `balance-overrides` crate (will
eventually be renamed to `state-overrides`).
# Changes
This PR only renames the traits and some functions to disambiguate the
code in preparation for introducing the new functionality.
Unfortunately I messed up the merge order of the stacked PRs so now this
PR also includes https://github.com/cowprotocol/services/pull/4399.
---------
Co-authored-by: Claude Sonnet 4.6
* Collapse settlement metrics into single-pass `summarize()` (#4388)
## Description
Previously, computing settlement metrics required four separate
iterations
over the trades collection — one each for `surplus_in_ether()`,
`fee_in_ether()`, `fee_breakdown()`, and `jit_orders()`:
```rust
let gas = settlement.gas();
let gas_price = settlement.gas_price();
let surplus = settlement.surplus_in_ether();
let fee = settlement.fee_in_ether();
let fee_breakdown = settlement.fee_breakdown();
let jit_orders = settlement.jit_orders();
```
This PR introduces a `summarize()` method on `Settlement` that performs
a
single pass over `self.trades`, accumulating all four values
simultaneously
and returning them as a `SettlementMetrics<'_>` struct. The call site in
`infra/persistence` is updated to destructure directly from the returned
struct:
```rust
let domain::settlement::SettlementMetrics {
gas,
gas_price,
surplus,
fee,
fee_breakdown,
jit_orders,
} = settlement.summarize();
```
The returned struct is defined as:
```rust
#[derive(Debug)]
pub struct SettlementMetrics<'a> {
pub gas: eth::Gas,
pub gas_price: eth::EffectiveGasPrice,
pub surplus: eth::Ether,
pub fee: eth::Ether,
pub fee_breakdown: HashMap,
pub jit_orders: Vec<&'a trade::Jit>,
}
```
## Changes
- **`domain/settlement/mod.rs`**
- Added `SettlementMetrics<'a>` struct
- Added `Settlement::summarize()` — single-pass computation replacing
the four individual iteration methods
- Preserves existing `tracing::warn!` fallback behaviour on per-trade
errors
- **`infra/persistence/mod.rs`**
- Replaced six individual `settlement.*()` calls with a single
`settlement.summarize()`, destructuring all fields directly from
`SettlementMetrics` via pattern matching
Fixes #4346
* Fetch and log (and cache) buy/sell quote token symbols (#4396)
# Description
Logs quote token symbols, keeps them in a cache to avoid the network
# Changes
* Add the token info fetcher into the QuoteHandler
* The fetcher provides us with generalized caching
## How to test
N/A
---------
Co-authored-by: Martin Magnus
---------
Co-authored-by: Jan [Yann] <4518474+fafk@users.noreply.github.com>
Co-authored-by: Martin Magnus
Co-authored-by: ilya
Co-authored-by: Marcin Szymczak
Co-authored-by: Claude
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: MarcusWentz <52706599+MarcusWentz@users.noreply.github.com>
Co-authored-by: tilacog
Co-authored-by: Anuj Bansal
Co-authored-by: Augusto Collerone
Co-authored-by: Ignacio
Co-authored-by: Aryan Godara <65490434+AryanGodara@users.noreply.github.com>
Co-authored-by: extrawurst <776816+extrawurst@users.noreply.github.com>
Co-authored-by: openjarvis2026
Co-authored-by: ashleychandy
Co-authored-by: Ashley Chandy <76095880+ashleychandy@users.noreply.github.com>
Co-authored-by: filius
Co-authored-by: Kaze <230549489+kaze-cow@users.noreply.github.com>
Co-authored-by: Nikita Kirsanov
Co-authored-by: Haris Angelidakis <64154020+harisang@users.noreply.github.com>
Co-authored-by: Igor Rončević <57319163+igorroncevic@users.noreply.github.com>
Co-authored-by: Felix Leupold <1200333+fleupold@users.noreply.github.com>
Co-authored-by: metalurgical <97008724+metalurgical@users.noreply.github.com>
Co-authored-by: DevNinja <102245100+0xDevNinja@users.noreply.github.com>
---
.cargo/audit.toml | 8 -
.claude/commands/debug-order.md | 20 +-
CLAUDE.md | 56 +-
Cargo.lock | 1616 ++-
Cargo.toml | 48 +-
Justfile | 25 +
LICENSE-APACHE | 0
LICENSE-GPL | 0
LICENSE-MIT | 0
README.md | 2 +
REVIEW.md | 78 +
contracts/.gitignore | 4 +
contracts/Cargo.lock | 2302 ++++
contracts/Cargo.toml | 19 +
.../contracts => contracts}/LICENSE-APACHE | 0
{crates/contracts => contracts}/LICENSE-MIT | 0
contracts/README.md | 60 +
.../artifacts/AnyoneAuthenticator.json | 0
.../artifacts/BalancerQueries.json | 32 +-
.../artifacts/BalancerV2Authorizer.json | 170 +-
.../artifacts/BalancerV2BasePool.json | 298 +-
.../artifacts/BalancerV2BasePoolFactory.json | 4 +-
.../BalancerV2ComposableStablePool.json | 526 +-
...BalancerV2ComposableStablePoolFactory.json | 30 +-
...lancerV2ComposableStablePoolFactoryV3.json | 282 +
...lancerV2ComposableStablePoolFactoryV4.json | 282 +
...lancerV2ComposableStablePoolFactoryV5.json | 282 +
...lancerV2ComposableStablePoolFactoryV6.json | 282 +
.../BalancerV2LiquidityBootstrappingPool.json | 404 +-
...erV2LiquidityBootstrappingPoolFactory.json | 6 +-
...lFeeLiquidityBootstrappingPoolFactory.json | 160 +
.../artifacts/BalancerV2StablePool.json | 370 +-
.../BalancerV2StablePoolFactoryV2.json | 6 +-
.../artifacts/BalancerV2Vault.json | 634 +-
.../artifacts/BalancerV2WeightedPool.json | 366 +-
.../BalancerV2WeightedPool2TokensFactory.json | 10 +-
.../BalancerV2WeightedPoolFactory.json | 10 +-
.../BalancerV2WeightedPoolFactoryV3.json | 28 +-
.../BalancerV2WeightedPoolFactoryV4.json | 272 +
.../artifacts/BalancerV3BatchRouter.json | 648 +-
contracts/artifacts/Balances.json | 110 +
contracts/artifacts/BaoswapRouter.json | 957 ++
.../artifacts/ChainalysisOracle.json | 66 +-
.../artifacts/CoWSwapEthFlow.json | 38 +-
.../artifacts/CoWSwapOnchainOrders.json | 0
.../artifacts/Counter.json | 0
.../artifacts/CowAmm.json | 662 +-
.../CowAmmConstantProductFactory.json | 610 +-
.../artifacts/CowAmmFactoryGetter.json | 0
.../artifacts/CowAmmLegacyHelper.json | 190 +-
.../artifacts/CowAmmUniswapV2PriceOracle.json | 75 +-
.../artifacts/CowProtocolToken.json | 278 +-
.../artifacts/CowSettlementForwarder.json | 0
.../artifacts/ERC1271SignatureValidator.json | 0
.../artifacts/ERC20.json | 114 +-
.../artifacts/ERC20Mintable.json | 142 +-
.../artifacts/FlashLoanRouter.json | 56 +-
.../GPv2AllowListAuthentication.json | 128 +-
.../artifacts/GPv2Settlement.json | 238 +-
.../artifacts/GasHog.json | 0
.../artifacts/GnosisSafe.json | 292 +-
...nosisSafeCompatibilityFallbackHandler.json | 124 +-
.../artifacts/GnosisSafeProxy.json | 0
.../artifacts/GnosisSafeProxyFactory.json | 32 +-
contracts/artifacts/HoneyswapRouter.json | 957 ++
.../artifacts/HooksTrampoline.json | 0
.../artifacts/ICowWrapper.json | 30 +-
contracts/artifacts/IERC4626.json | 36 +
.../artifacts/ISwaprPair.json | 244 +-
.../artifacts/IUniswapLikePair.json | 186 +-
.../artifacts/IUniswapLikeRouter.json | 166 +-
.../artifacts/IUniswapV3Factory.json | 78 +-
.../artifacts/IZeroex.json | 10362 ++++++++--------
contracts/artifacts/LiquoriceSettlement.json | 4193 +++++++
contracts/artifacts/MockERC4626Wrapper.json | 240 +
.../artifacts/NonStandardERC20Balances.json | 0
contracts/artifacts/PancakeRouter.json | 957 ++
.../artifacts/Permit2.json | 200 +-
.../artifacts/RemoteERC20Balances.json | 0
.../artifacts/Signatures.json | 0
.../artifacts/Solver.json | 0
.../artifacts/Spardose.json | 0
contracts/artifacts/SushiSwapRouter.json | 957 ++
.../artifacts/Swapper.json | 0
contracts/artifacts/SwaprRouter.json | 957 ++
.../artifacts/TestnetUniswapV2Router02.json | 957 ++
.../artifacts/Trader.json | 0
.../artifacts/UniswapV2Factory.json | 88 +-
.../artifacts/UniswapV2Router02.json | 178 +-
.../artifacts/UniswapV3Pool.json | 398 +-
.../artifacts/UniswapV3QuoterV2.json | 4 +-
.../artifacts/UniswapV3SwapRouterV2.json | 0
.../artifacts/WETH9.json | 196 +-
{crates/contracts => contracts}/foundry.toml | 0
contracts/generated/.gitignore | 2 +
contracts/generated/Cargo.lock | 4531 +++++++
contracts/generated/Cargo.toml | 17 +
.../generated/contracts-facade/Cargo.toml | 90 +
.../generated/contracts-facade/src/lib.rs | 99 +
.../anyoneauthenticator/Cargo.toml | 19 +
.../anyoneauthenticator/src/lib.rs | 527 +
.../balancerqueries/Cargo.toml | 19 +
.../balancerqueries/src/lib.rs | 1749 +++
.../balancerv2authorizer/Cargo.toml | 19 +
.../balancerv2authorizer/src/lib.rs | 1455 +++
.../balancerv2basepool/Cargo.toml | 19 +
.../balancerv2basepool/src/lib.rs | 3947 ++++++
.../balancerv2basepoolfactory/Cargo.toml | 19 +
.../balancerv2basepoolfactory/src/lib.rs | 374 +
.../balancerv2composablestablepool/Cargo.toml | 19 +
.../balancerv2composablestablepool/src/lib.rs | 6664 ++++++++++
.../Cargo.toml | 19 +
.../src/lib.rs | 1540 +++
.../Cargo.toml | 19 +
.../src/lib.rs | 1544 +++
.../Cargo.toml | 19 +
.../src/lib.rs | 1552 +++
.../Cargo.toml | 19 +
.../src/lib.rs | 1556 +++
.../Cargo.toml | 19 +
.../src/lib.rs | 1556 +++
.../Cargo.toml | 19 +
.../src/lib.rs | 5185 ++++++++
.../Cargo.toml | 19 +
.../src/lib.rs | 934 ++
.../Cargo.toml | 19 +
.../src/lib.rs | 974 ++
.../balancerv2stablepool/Cargo.toml | 19 +
.../balancerv2stablepool/src/lib.rs | 4740 +++++++
.../balancerv2stablepoolfactoryv2/Cargo.toml | 19 +
.../balancerv2stablepoolfactoryv2/src/lib.rs | 1232 ++
.../balancerv2vault/Cargo.toml | 19 +
.../balancerv2vault/src/lib.rs | 7268 +++++++++++
.../balancerv2weightedpool/Cargo.toml | 19 +
.../balancerv2weightedpool/src/lib.rs | 4380 +++++++
.../Cargo.toml | 19 +
.../src/lib.rs | 1012 ++
.../balancerv2weightedpoolfactory/Cargo.toml | 19 +
.../balancerv2weightedpoolfactory/src/lib.rs | 976 ++
.../Cargo.toml | 19 +
.../src/lib.rs | 1499 +++
.../Cargo.toml | 19 +
.../src/lib.rs | 1511 +++
.../balancerv3batchrouter/Cargo.toml | 19 +
.../balancerv3batchrouter/src/lib.rs | 4736 +++++++
.../contracts-generated/balances/Cargo.toml | 19 +
.../contracts-generated/balances/src/lib.rs | 1278 ++
.../baoswaprouter/Cargo.toml | 19 +
.../baoswaprouter/src/lib.rs | 1578 +++
.../chainalysisoracle/Cargo.toml | 19 +
.../chainalysisoracle/src/lib.rs | 1800 +++
.../contracts-generated/counter/Cargo.toml | 19 +
.../contracts-generated/counter/src/lib.rs | 952 ++
.../contracts-generated/cowamm/Cargo.toml | 19 +
.../contracts-generated/cowamm/src/lib.rs | 4430 +++++++
.../cowammconstantproductfactory/Cargo.toml | 19 +
.../cowammconstantproductfactory/src/lib.rs | 3081 +++++
.../cowammfactorygetter/Cargo.toml | 19 +
.../cowammfactorygetter/src/lib.rs | 441 +
.../cowammlegacyhelper/Cargo.toml | 19 +
.../cowammlegacyhelper/src/lib.rs | 3196 +++++
.../cowammuniswapv2priceoracle/Cargo.toml | 19 +
.../cowammuniswapv2priceoracle/src/lib.rs | 230 +
.../cowprotocoltoken/Cargo.toml | 19 +
.../cowprotocoltoken/src/lib.rs | 4183 +++++++
.../cowsettlementforwarder/Cargo.toml | 19 +
.../cowsettlementforwarder/src/lib.rs | 1419 +++
.../cowswapethflow/Cargo.toml | 19 +
.../cowswapethflow/src/lib.rs | 5329 ++++++++
.../cowswaponchainorders/Cargo.toml | 19 +
.../cowswaponchainorders/src/lib.rs | 1815 +++
.../erc1271signaturevalidator/Cargo.toml | 19 +
.../erc1271signaturevalidator/src/lib.rs | 497 +
.../contracts-generated/erc20/Cargo.toml | 19 +
.../contracts-generated/erc20/src/lib.rs | 2427 ++++
.../erc20mintable/Cargo.toml | 19 +
.../erc20mintable/src/lib.rs | 2367 ++++
.../flashloanrouter/Cargo.toml | 19 +
.../flashloanrouter/src/lib.rs | 1352 ++
.../contracts-generated/gashog/Cargo.toml | 19 +
.../contracts-generated/gashog/src/lib.rs | 784 ++
.../contracts-generated/gnosissafe/Cargo.toml | 19 +
.../contracts-generated/gnosissafe/src/lib.rs | 4298 +++++++
.../Cargo.toml | 19 +
.../src/lib.rs | 1415 +++
.../gnosissafeproxy/Cargo.toml | 19 +
.../gnosissafeproxy/src/lib.rs | 317 +
.../gnosissafeproxyfactory/Cargo.toml | 19 +
.../gnosissafeproxyfactory/src/lib.rs | 780 ++
.../gpv2allowlistauthentication/Cargo.toml | 19 +
.../gpv2allowlistauthentication/src/lib.rs | 2150 ++++
.../gpv2settlement/Cargo.toml | 19 +
.../gpv2settlement/src/lib.rs | 5150 ++++++++
.../honeyswaprouter/Cargo.toml | 19 +
.../honeyswaprouter/src/lib.rs | 1578 +++
.../hookstrampoline/Cargo.toml | 19 +
.../hookstrampoline/src/lib.rs | 1329 ++
.../icowwrapper/Cargo.toml | 19 +
.../icowwrapper/src/lib.rs | 469 +
.../contracts-generated/ierc4626/Cargo.toml | 19 +
.../contracts-generated/ierc4626/src/lib.rs | 648 +
.../contracts-generated/iswaprpair/Cargo.toml | 19 +
.../contracts-generated/iswaprpair/src/lib.rs | 5733 +++++++++
.../iuniswaplikepair/Cargo.toml | 19 +
.../iuniswaplikepair/src/lib.rs | 5554 +++++++++
.../iuniswaplikerouter/Cargo.toml | 19 +
.../iuniswaplikerouter/src/lib.rs | 1546 +++
.../iuniswapv3factory/Cargo.toml | 19 +
.../iuniswapv3factory/src/lib.rs | 1379 ++
.../contracts-generated/izeroex/Cargo.toml | 19 +
.../contracts-generated/izeroex/src/lib.rs | 8342 +++++++++++++
.../liquoricesettlement/Cargo.toml | 19 +
.../liquoricesettlement/src/lib.rs | 9607 ++++++++++++++
.../mockerc4626wrapper/Cargo.toml | 19 +
.../mockerc4626wrapper/src/lib.rs | 2768 +++++
.../nonstandarderc20balances/Cargo.toml | 19 +
.../nonstandarderc20balances/src/lib.rs | 1643 +++
.../pancakerouter/Cargo.toml | 19 +
.../pancakerouter/src/lib.rs | 1590 +++
.../contracts-generated/permit2/Cargo.toml | 19 +
.../contracts-generated/permit2/src/lib.rs | 4706 +++++++
.../remoteerc20balances/Cargo.toml | 19 +
.../remoteerc20balances/src/lib.rs | 1909 +++
.../contracts-generated/signatures/Cargo.toml | 19 +
.../contracts-generated/signatures/src/lib.rs | 1171 ++
.../contracts-generated/solver/Cargo.toml | 19 +
.../contracts-generated/solver/src/lib.rs | 1146 ++
.../contracts-generated/spardose/Cargo.toml | 19 +
.../contracts-generated/spardose/src/lib.rs | 534 +
.../sushiswaprouter/Cargo.toml | 19 +
.../sushiswaprouter/src/lib.rs | 1606 +++
.../contracts-generated/swapper/Cargo.toml | 19 +
.../contracts-generated/swapper/src/lib.rs | 1553 +++
.../swaprrouter/Cargo.toml | 19 +
.../swaprrouter/src/lib.rs | 1586 +++
.../testnetuniswapv2router02/Cargo.toml | 19 +
.../testnetuniswapv2router02/src/lib.rs | 1603 +++
.../contracts-generated/trader/Cargo.toml | 19 +
.../contracts-generated/trader/src/lib.rs | 1082 ++
.../uniswapv2factory/Cargo.toml | 19 +
.../uniswapv2factory/src/lib.rs | 1191 ++
.../uniswapv2router02/Cargo.toml | 19 +
.../uniswapv2router02/src/lib.rs | 1804 +++
.../uniswapv3pool/Cargo.toml | 19 +
.../uniswapv3pool/src/lib.rs | 5990 +++++++++
.../uniswapv3quoterv2/Cargo.toml | 19 +
.../uniswapv3quoterv2/src/lib.rs | 2716 ++++
.../uniswapv3swaprouterv2/Cargo.toml | 19 +
.../uniswapv3swaprouterv2/src/lib.rs | 1073 ++
.../contracts-generated/weth9/Cargo.toml | 19 +
.../contracts-generated/weth9/src/lib.rs | 3114 +++++
contracts/generated/rustfmt.toml | 12 +
.../script/DeployBalances.s.sol | 0
.../script/DeploySignatures.s.sol | 0
.../solidity/AnyoneAuthenticator.sol | 0
.../solidity/Balances.sol | 8 +-
.../solidity/CowSettlementForwarder.sol | 0
.../contracts => contracts}/solidity/Makefile | 2 +-
.../solidity/README.md | 0
.../solidity/Signatures.sol | 0
.../solidity/Solver.sol | 0
.../solidity/Spardose.sol | 0
.../solidity/Swapper.sol | 0
.../solidity/Trader.sol | 0
.../solidity/interfaces/IERC1271.sol | 0
.../solidity/interfaces/IERC20.sol | 0
contracts/solidity/interfaces/IERC4626.sol | 8 +
.../solidity/interfaces/ISettlement.sol | 0
.../interfaces/IStorageAccessible.sol | 0
.../solidity/interfaces/IVault.sol | 0
.../solidity/interfaces/IVaultRelayer.sol | 0
.../solidity/libraries/Caller.sol | 0
.../solidity/libraries/Math.sol | 0
.../solidity/libraries/SafeERC20.sol | 0
.../solidity/tests/Counter.sol | 0
.../solidity/tests/GasHog.sol | 0
.../solidity/tests/MockERC4626Wrapper.sol | 54 +
.../tests/NonStandardERC20Balances.sol | 0
.../solidity/tests/RemoteERC20Balances.sol | 0
contracts/src/codegen.rs | 487 +
contracts/src/main.rs | 602 +
contracts/src/networks.rs | 13 +
.../src/bin => contracts/src}/vendor.rs | 55 +-
crates/account-balances/src/lib.rs | 19 +-
crates/account-balances/src/simulation.rs | 14 +-
crates/app-data/src/app_data.rs | 7 +
crates/autopilot/Cargo.toml | 3 +
crates/autopilot/src/arguments.rs | 272 +-
.../src/boundary/events/settlement.rs | 2 +-
crates/autopilot/src/boundary/order.rs | 5 +-
.../ethflow_events/event_retriever.rs | 2 +-
.../database/ethflow_events/event_storing.rs | 2 +-
crates/autopilot/src/database/events.rs | 2 +-
.../onchain_order_events/ethflow_events.rs | 4 +-
.../onchain_order_events/event_retriever.rs | 2 +-
.../src/database/onchain_order_events/mod.rs | 37 +-
crates/autopilot/src/database/order_events.rs | 5 +-
crates/autopilot/src/domain/auction/mod.rs | 5 +-
crates/autopilot/src/domain/auction/order.rs | 3 +-
crates/autopilot/src/domain/blockchain.rs | 47 +
.../autopilot/src/domain/competition/mod.rs | 3 +-
.../domain/competition/winner_selection.rs | 21 +-
crates/autopilot/src/domain/eth/mod.rs | 366 -
crates/autopilot/src/domain/fee/mod.rs | 22 +-
crates/autopilot/src/domain/fee/policy.rs | 4 +-
crates/autopilot/src/domain/mod.rs | 2 +-
crates/autopilot/src/domain/quote/mod.rs | 3 +-
.../src/domain/settlement/auction.rs | 7 +-
crates/autopilot/src/domain/settlement/mod.rs | 186 +-
.../src/domain/settlement/observer.rs | 12 +-
.../src/domain/settlement/trade/math.rs | 4 +-
.../src/domain/settlement/trade/mod.rs | 10 +-
.../src/domain/settlement/transaction/mod.rs | 13 +-
.../settlement/transaction/tokenized.rs | 5 +-
crates/autopilot/src/infra/api.rs | 55 +
.../src/infra/blockchain/contracts.rs | 33 +-
crates/autopilot/src/infra/blockchain/mod.rs | 23 +-
.../src/infra/persistence/dto/auction.rs | 7 +-
.../src/infra/persistence/dto/order.rs | 5 +-
crates/autopilot/src/infra/persistence/mod.rs | 76 +-
.../autopilot/src/infra/solvers/dto/solve.rs | 7 +-
crates/autopilot/src/infra/solvers/mod.rs | 4 +-
crates/autopilot/src/lib.rs | 3 +-
crates/autopilot/src/periodic_db_cleanup.rs | 3 +
crates/autopilot/src/run.rs | 213 +-
crates/autopilot/src/run_loop.rs | 63 +-
crates/autopilot/src/shadow.rs | 2 +-
crates/autopilot/src/solvable_orders.rs | 187 +-
crates/bad-tokens/src/trace_call.rs | 2 +-
crates/balance-overrides/Cargo.toml | 5 +
crates/balance-overrides/src/aave.rs | 295 +
crates/balance-overrides/src/detector.rs | 140 +-
crates/balance-overrides/src/lib.rs | 447 +-
crates/chain/src/lib.rs | 6 +-
crates/configs/Cargo.toml | 13 +-
crates/configs/src/autopilot/cow_amm.rs | 70 +
crates/configs/src/autopilot/ethflow.rs | 58 +
.../src/autopilot}/fee_policy.rs | 8 +-
.../config => configs/src/autopilot}/mod.rs | 210 +-
.../src/autopilot}/native_price.rs | 22 +-
.../src/autopilot}/order_events_cleanup.rs | 1 +
crates/configs/src/autopilot/run_loop.rs | 120 +
.../config => configs/src/autopilot}/s3.rs | 1 +
.../src/autopilot}/solver.rs | 21 +-
.../src/autopilot}/trusted_tokens.rs | 1 +
crates/configs/src/balance_overrides.rs | 252 +
.../config => configs/src}/banned_users.rs | 3 +
crates/configs/src/database.rs | 14 +-
crates/configs/src/deserialize_env.rs | 17 +
crates/configs/src/fee_factor.rs | 146 +
crates/configs/src/gas_price_estimation.rs | 15 +
crates/configs/src/http_client.rs | 23 +
crates/configs/src/lib.rs | 14 +
crates/configs/src/native_price.rs | 157 +
crates/configs/src/native_price_estimators.rs | 120 +
crates/configs/src/order_quoting.rs | 196 +
.../config => configs/src/orderbook}/ipfs.rs | 27 +-
.../config => configs/src/orderbook}/mod.rs | 160 +-
.../src/orderbook}/native_price.rs | 22 +-
.../src/orderbook}/order_validation.rs | 16 +-
crates/configs/src/price_estimation.rs | 451 +
crates/configs/src/rate_limit.rs | 73 +
crates/configs/src/shared.rs | 434 +
crates/configs/src/simulator.rs | 210 +
crates/contracts/.gitignore | 2 -
crates/contracts/Cargo.toml | 42 -
crates/contracts/README.md | 14 -
...lancerV2ComposableStablePoolFactoryV3.json | 1 -
...lancerV2ComposableStablePoolFactoryV4.json | 1 -
...lancerV2ComposableStablePoolFactoryV5.json | 1 -
...lancerV2ComposableStablePoolFactoryV6.json | 1 -
...lFeeLiquidityBootstrappingPoolFactory.json | 1 -
.../BalancerV2WeightedPoolFactoryV4.json | 1 -
crates/contracts/artifacts/Balances.json | 105 -
crates/contracts/artifacts/BaoswapRouter.json | 1 -
.../contracts/artifacts/HoneyswapRouter.json | 1 -
.../artifacts/LiquoriceSettlement.json | 4191 -------
crates/contracts/artifacts/PancakeRouter.json | 1 -
.../contracts/artifacts/SushiSwapRouter.json | 1 -
crates/contracts/artifacts/SwaprRouter.json | 1 -
.../artifacts/TestnetUniswapV2Router02.json | 1 -
crates/contracts/build.rs | 1262 --
crates/contracts/rustfmt.toml | 2 -
crates/contracts/src/lib.rs | 5 -
crates/cow-amm/src/amm.rs | 5 +-
crates/cow-amm/src/cache.rs | 2 +-
crates/cow-amm/src/factory.rs | 2 +-
crates/cow-amm/src/lib.rs | 4 +-
crates/cow-amm/src/maintainers.rs | 2 +-
crates/cow-amm/src/registry.rs | 2 +-
crates/database/src/auction.rs | 36 +
crates/database/src/byte_array.rs | 8 +-
crates/database/src/ethflow_orders.rs | 4 +-
crates/database/src/fee_policies.rs | 9 +
crates/database/src/jit_orders.rs | 4 +-
crates/database/src/lib.rs | 1 +
crates/database/src/onchain_invalidations.rs | 1 +
crates/database/src/order_events.rs | 108 +-
crates/database/src/order_execution.rs | 27 +
crates/database/src/orders.rs | 5 +-
crates/database/src/settlement_executions.rs | 55 +-
crates/database/src/solver_competition.rs | 54 +-
crates/database/src/solver_competition_v2.rs | 68 +-
crates/database/src/trades.rs | 294 +-
crates/driver/Cargo.toml | 4 +
crates/driver/example.toml | 4 -
.../src/boundary/liquidity/balancer/v2/mod.rs | 17 +-
.../boundary/liquidity/balancer/v2/stable.rs | 5 +-
.../liquidity/balancer/v2/weighted.rs | 5 +-
crates/driver/src/boundary/liquidity/mod.rs | 7 +-
.../src/boundary/liquidity/uniswap/v2.rs | 17 +-
.../src/boundary/liquidity/uniswap/v3.rs | 11 +-
.../driver/src/boundary/liquidity/zeroex.rs | 8 +-
crates/driver/src/domain/blockchain.rs | 83 +
.../driver/src/domain/competition/auction.rs | 6 +-
crates/driver/src/domain/competition/mod.rs | 454 +-
.../src/domain/competition/order/mod.rs | 7 +-
.../src/domain/competition/order/signature.rs | 2 +-
.../src/domain/competition/pre_processing.rs | 18 +-
.../risk_detector/bad_tokens/cache.rs | 3 +-
.../risk_detector/bad_tokens/simulation.rs | 2 +-
.../domain/competition/risk_detector/mod.rs | 6 +-
.../domain/competition/solution/encoding.rs | 105 +-
.../src/domain/competition/solution/fee.rs | 12 +-
.../competition/solution/interaction.rs | 3 +-
.../src/domain/competition/solution/mod.rs | 101 +-
.../domain/competition/solution/scoring.rs | 18 +-
.../domain/competition/solution/settlement.rs | 196 +-
.../domain/competition/solution/slippage.rs | 4 +-
.../src/domain/competition/solution/trade.rs | 12 +-
.../driver/src/domain/competition/sorting.rs | 6 +-
crates/driver/src/domain/cow_amm.rs | 13 +-
crates/driver/src/domain/eth/mod.rs | 459 -
crates/driver/src/domain/flashloan.rs | 51 +
crates/driver/src/domain/interaction.rs | 32 +
.../src/domain/liquidity/balancer/v2/mod.rs | 2 +-
.../domain/liquidity/balancer/v2/stable.rs | 5 +-
.../domain/liquidity/balancer/v2/weighted.rs | 5 +-
crates/driver/src/domain/liquidity/mod.rs | 2 +-
crates/driver/src/domain/liquidity/swapr.rs | 11 +-
.../driver/src/domain/liquidity/uniswap/v2.rs | 5 +-
.../driver/src/domain/liquidity/uniswap/v3.rs | 5 +-
crates/driver/src/domain/liquidity/zeroex.rs | 11 +-
crates/driver/src/domain/mempools.rs | 76 +-
crates/driver/src/domain/mod.rs | 8 +-
crates/driver/src/domain/quote.rs | 33 +-
crates/driver/src/infra/api/error.rs | 114 +-
crates/driver/src/infra/api/extract.rs | 69 +
crates/driver/src/infra/api/mod.rs | 5 +-
.../src/infra/api/routes/quote/dto/order.rs | 3 +-
.../src/infra/api/routes/quote/dto/quote.rs | 7 +-
.../driver/src/infra/api/routes/quote/mod.rs | 7 +-
.../driver/src/infra/api/routes/reveal/mod.rs | 4 +-
.../driver/src/infra/api/routes/settle/mod.rs | 6 +-
.../api/routes/solve/dto/solve_request.rs | 7 +-
.../api/routes/solve/dto/solve_response.rs | 5 +-
.../driver/src/infra/blockchain/contracts.rs | 26 +-
crates/driver/src/infra/blockchain/gas.rs | 23 +-
crates/driver/src/infra/blockchain/mod.rs | 120 +-
crates/driver/src/infra/blockchain/token.rs | 6 +-
crates/driver/src/infra/config/file/load.rs | 27 +-
crates/driver/src/infra/config/file/mod.rs | 65 +-
crates/driver/src/infra/config/mod.rs | 22 +-
crates/driver/src/infra/liquidity/config.rs | 58 +-
crates/driver/src/infra/mempool/mod.rs | 3 +-
crates/driver/src/infra/mod.rs | 10 +-
.../liquidity_sources/liquorice/notifier.rs | 18 +-
crates/driver/src/infra/notify/mod.rs | 17 +-
.../driver/src/infra/notify/notification.rs | 8 +-
crates/driver/src/infra/observe/mod.rs | 32 +-
crates/driver/src/infra/simulator/enso/dto.rs | 39 -
crates/driver/src/infra/simulator/enso/mod.rs | 103 -
.../src/infra/simulator/tenderly/dto.rs | 80 -
.../src/infra/simulator/tenderly/mod.rs | 144 -
crates/driver/src/infra/solver/dto/auction.rs | 24 +-
.../src/infra/solver/dto/notification.rs | 5 +-
.../driver/src/infra/solver/dto/solution.rs | 42 +-
crates/driver/src/infra/solver/eip7702.rs | 35 +-
crates/driver/src/infra/solver/mod.rs | 55 +-
crates/driver/src/infra/tokens.rs | 6 +-
crates/driver/src/run.rs | 62 +-
crates/driver/src/tests/cases/fees.rs | 15 +-
.../driver/src/tests/cases/flashloan_hints.rs | 49 +
.../src/tests/cases/gas_fee_override.rs | 60 +
crates/driver/src/tests/cases/haircut.rs | 3 +-
crates/driver/src/tests/cases/jit_orders.rs | 32 +-
crates/driver/src/tests/cases/mod.rs | 3 +-
.../src/tests/cases/multiple_solutions.rs | 102 +-
.../driver/src/tests/cases/protocol_fees.rs | 33 +-
crates/driver/src/tests/cases/quote.rs | 3 +-
crates/driver/src/tests/cases/settle.rs | 167 +-
.../driver/src/tests/cases/solver_balance.rs | 6 +-
crates/driver/src/tests/setup/blockchain.rs | 22 +-
crates/driver/src/tests/setup/driver.rs | 16 +-
crates/driver/src/tests/setup/fee.rs | 2 +-
crates/driver/src/tests/setup/mod.rs | 54 +-
crates/driver/src/tests/setup/solver.rs | 10 +-
crates/e2e/Cargo.toml | 4 +
crates/e2e/src/setup/deploy.rs | 7 +-
crates/e2e/src/setup/mod.rs | 1 +
.../e2e/src/setup/onchain_components/mod.rs | 4 +-
.../e2e/src/setup/onchain_components/safe.rs | 2 +-
crates/e2e/src/setup/services.rs | 360 +-
crates/e2e/src/setup/solver/mock.rs | 57 +-
crates/e2e/tests/e2e/autopilot_leader.rs | 106 +-
crates/e2e/tests/e2e/banned_users.rs | 6 +-
crates/e2e/tests/e2e/buffers.rs | 33 +-
crates/e2e/tests/e2e/contract_revert.rs | 61 +
crates/e2e/tests/e2e/cors.rs | 44 +-
crates/e2e/tests/e2e/cow_amm.rs | 144 +-
crates/e2e/tests/e2e/debug_order.rs | 277 +
crates/e2e/tests/e2e/eip4626.rs | 293 +
crates/e2e/tests/e2e/ethflow.rs | 2 +-
crates/e2e/tests/e2e/hooks.rs | 6 +-
crates/e2e/tests/e2e/jit_orders.rs | 34 +-
crates/e2e/tests/e2e/limit_orders.rs | 195 +-
crates/e2e/tests/e2e/liquidity.rs | 37 +-
.../e2e/liquidity_source_notification.rs | 38 +-
crates/e2e/tests/e2e/main.rs | 4 +
crates/e2e/tests/e2e/malformed_requests.rs | 270 +-
crates/e2e/tests/e2e/order_cancellation.rs | 33 +-
crates/e2e/tests/e2e/order_simulation.rs | 425 +
crates/e2e/tests/e2e/parallel_settlement.rs | 2 +-
.../e2e/tests/e2e/place_order_with_quote.rs | 103 +-
crates/e2e/tests/e2e/protocol_fee.rs | 85 +-
crates/e2e/tests/e2e/quote_verification.rs | 353 +-
crates/e2e/tests/e2e/quoting.rs | 488 +-
crates/e2e/tests/e2e/refunder.rs | 2 +-
crates/e2e/tests/e2e/replace_order.rs | 21 +-
crates/e2e/tests/e2e/smart_contract_orders.rs | 12 +-
crates/e2e/tests/e2e/solver_competition.rs | 136 +-
crates/e2e/tests/e2e/submission.rs | 264 +-
crates/e2e/tests/e2e/uncovered_order.rs | 118 +
crates/e2e/tests/e2e/univ2.rs | 2 +-
crates/e2e/tests/e2e/wrapper.rs | 4 +-
crates/eth-domain-types/Cargo.toml | 14 +
crates/eth-domain-types/src/access_list.rs | 94 +
.../eth => eth-domain-types/src}/allowance.rs | 2 +-
.../eth => eth-domain-types/src}/eip712.rs | 0
crates/eth-domain-types/src/ether.rs | 66 +
.../eth => eth-domain-types/src}/gas.rs | 20 +-
crates/eth-domain-types/src/lib.rs | 154 +
crates/eth-domain-types/src/token_amount.rs | 125 +
crates/ethrpc/src/alloy/errors.rs | 103 +-
crates/event-indexing/src/event_handler.rs | 2 +-
crates/gas-price-estimation/Cargo.toml | 1 +
.../src/configurable_alloy.rs | 17 +-
crates/gas-price-estimation/src/lib.rs | 27 +-
crates/http-client/Cargo.toml | 12 +
.../http_client.rs => http-client/src/lib.rs} | 33 +-
.../src/balancer_v2/pool_fetching/mod.rs | 2 +-
.../balancer_v2/pool_fetching/pool_storage.rs | 2 +-
.../src/balancer_v2/pool_fetching/registry.rs | 2 +-
.../src/balancer_v2/pools/common.rs | 4 +-
.../balancer_v2/pools/composable_stable.rs | 2 +-
.../pools/liquidity_bootstrapping.rs | 2 +-
.../src/balancer_v2/pools/stable.rs | 2 +-
.../src/balancer_v2/pools/weighted.rs | 2 +-
crates/liquidity-sources/src/lib.rs | 2 +-
.../src/recent_block_cache.rs | 4 +-
crates/liquidity-sources/src/swapr.rs | 2 +-
.../liquidity-sources/src/uniswap_v2/mod.rs | 16 +-
.../src/uniswap_v2/pool_fetching.rs | 2 +-
.../src/uniswap_v3/event_fetching.rs | 2 +-
.../src/uniswap_v3/pool_fetching.rs | 4 +-
crates/model/Cargo.toml | 1 +
crates/model/src/debug_report.rs | 148 +
crates/model/src/lib.rs | 1 +
crates/model/src/order.rs | 8 +
crates/order-validation/src/banned.rs | 2 +-
crates/orderbook/Cargo.toml | 4 +
crates/orderbook/openapi.yml | 534 +-
crates/orderbook/src/api.rs | 111 +-
crates/orderbook/src/api/debug_order.rs | 28 +
crates/orderbook/src/api/debug_simulation.rs | 74 +
.../src/api/get_solver_competition.rs | 46 +-
.../src/api/get_solver_competition_v2.rs | 45 +-
crates/orderbook/src/api/post_order.rs | 23 +-
crates/orderbook/src/arguments.rs | 35 +-
crates/orderbook/src/config/banned_users.rs | 28 -
crates/orderbook/src/database/debug_report.rs | 238 +
crates/orderbook/src/database/mod.rs | 57 +-
crates/orderbook/src/database/orders.rs | 2 +
.../src/database/solver_competition.rs | 37 +-
.../src/database/solver_competition_v2.rs | 25 +-
crates/orderbook/src/database/trades.rs | 11 +-
crates/orderbook/src/dto/mod.rs | 71 +-
crates/orderbook/src/lib.rs | 1 -
crates/orderbook/src/orderbook.rs | 161 +-
crates/orderbook/src/quoter.rs | 24 +-
crates/orderbook/src/run.rs | 204 +-
crates/orderbook/src/solver_competition.rs | 6 +
crates/price-estimation/Cargo.toml | 5 +
.../price-estimation/src/competition/mod.rs | 41 +
.../price-estimation/src/competition/quote.rs | 12 -
crates/price-estimation/src/config/mod.rs | 1 +
.../src/config/native_price.rs | 156 +-
.../src/config/price_estimation.rs | 28 +
crates/price-estimation/src/factory.rs | 109 +-
crates/price-estimation/src/instrumented.rs | 26 +-
crates/price-estimation/src/lib.rs | 523 +-
.../price-estimation/src/native/coingecko.rs | 1 -
crates/price-estimation/src/native/eip4626.rs | 321 +
crates/price-estimation/src/native/mod.rs | 2 +
.../src/native_price_cache.rs | 113 +-
crates/price-estimation/src/sanitized.rs | 12 +-
.../src/trade_finding/external.rs | 183 +-
.../price-estimation/src/trade_finding/mod.rs | 156 +-
.../src/trade_finding/trade_estimator.rs | 76 +
.../src/trade_verifier/mod.rs | 940 +-
.../src/trade_verifier/tenderly_api.rs | 463 -
crates/price-estimation/src/utils/encoding.rs | 88 -
crates/price-estimation/src/utils/mod.rs | 1 -
crates/rate-limit/Cargo.toml | 10 +-
crates/rate-limit/src/lib.rs | 112 +-
crates/refunder/Cargo.toml | 1 +
crates/refunder/src/arguments.rs | 31 +-
crates/refunder/src/infra/chain.rs | 2 +-
crates/refunder/src/infra/database.rs | 2 +-
crates/refunder/src/refund_service.rs | 2 +-
crates/refunder/src/submitter.rs | 2 +-
crates/refunder/src/traits.rs | 2 +-
crates/request-sharing/src/lib.rs | 60 +-
crates/s3/Cargo.toml | 2 +-
crates/shared/Cargo.toml | 1 +
crates/shared/src/arguments.rs | 431 +-
crates/shared/src/current_block.rs | 9 +
crates/shared/src/encoded_settlement.rs | 218 -
crates/shared/src/fee.rs | 3 +-
crates/shared/src/lib.rs | 3 -
crates/shared/src/order_quoting.rs | 125 +-
crates/shared/src/order_validation.rs | 261 +-
crates/shared/src/web3.rs | 10 +
crates/signature-validator/src/lib.rs | 8 +-
crates/signature-validator/src/simulation.rs | 10 +-
crates/simulator/Cargo.toml | 53 +
crates/simulator/src/encoding.rs | 712 ++
crates/simulator/src/ethereum/contracts.rs | 33 +
crates/simulator/src/ethereum/mod.rs | 159 +
.../simulator/mod.rs => simulator/src/lib.rs} | 108 +-
crates/simulator/src/simulation_builder.rs | 578 +
crates/simulator/src/tenderly/dto.rs | 205 +
crates/simulator/src/tenderly/mod.rs | 351 +
crates/simulator/src/utils/mod.rs | 14 +
crates/solver/Cargo.toml | 1 +
crates/solver/src/interactions/balancer_v2.rs | 5 +-
crates/solver/src/interactions/erc20.rs | 2 +-
crates/solver/src/interactions/uniswap_v2.rs | 2 +-
crates/solver/src/interactions/uniswap_v3.rs | 2 +-
crates/solver/src/interactions/weth.rs | 2 +-
crates/solver/src/interactions/zeroex.rs | 2 +-
crates/solver/src/liquidity/balancer_v2.rs | 5 +-
crates/solver/src/liquidity/uniswap_v3.rs | 2 +-
crates/solver/src/liquidity/zeroex.rs | 5 +-
crates/solver/src/settlement/mod.rs | 6 +-
.../src/settlement/settlement_encoder.rs | 33 +-
crates/solvers-dto/Cargo.toml | 1 +
crates/solvers-dto/src/notification.rs | 1 +
crates/solvers-dto/src/solution.rs | 113 +-
crates/solvers/Cargo.toml | 11 +
crates/solvers/config/example.bitget.toml | 19 +
crates/solvers/config/example.okx.toml | 51 +
crates/solvers/openapi.yml | 18 +
.../solvers/src/api/routes/solve/dto/mod.rs | 2 +-
.../src/api/routes/solve/dto/solution.rs | 5 +-
crates/solvers/src/api/routes/solve/mod.rs | 2 +-
crates/solvers/src/boundary/baseline.rs | 4 +-
.../src/boundary/liquidity/concentrated.rs | 4 +-
.../solvers/src/domain/dex/minimum_surplus.rs | 141 +
crates/solvers/src/domain/dex/mod.rs | 204 +
crates/solvers/src/domain/dex/shared.rs | 54 +
crates/solvers/src/domain/dex/slippage.rs | 268 +
crates/solvers/src/domain/eth/chain.rs | 197 +
crates/solvers/src/domain/eth/mod.rs | 19 +-
crates/solvers/src/domain/mod.rs | 1 +
crates/solvers/src/domain/order.rs | 17 +-
crates/solvers/src/domain/solution.rs | 103 +-
.../domain/{solver.rs => solver/baseline.rs} | 4 +-
crates/solvers/src/domain/solver/dex/fills.rs | 180 +
crates/solvers/src/domain/solver/dex/mod.rs | 231 +
crates/solvers/src/domain/solver/mod.rs | 22 +
crates/solvers/src/infra/blockchain.rs | 4 +
crates/solvers/src/infra/cli.rs | 10 +
.../infra/{config.rs => config/baseline.rs} | 22 +-
.../src/infra/config/dex/bitget/file.rs | 85 +
.../src/infra/config/dex/bitget/mod.rs | 6 +
crates/solvers/src/infra/config/dex/file.rs | 206 +
crates/solvers/src/infra/config/dex/mod.rs | 33 +
.../solvers/src/infra/config/dex/okx/file.rs | 115 +
.../solvers/src/infra/config/dex/okx/mod.rs | 6 +
crates/solvers/src/infra/config/mod.rs | 22 +
crates/solvers/src/infra/contracts.rs | 30 +-
crates/solvers/src/infra/dex/bitget/dto.rs | 271 +
crates/solvers/src/infra/dex/bitget/mod.rs | 468 +
crates/solvers/src/infra/dex/mod.rs | 121 +
crates/solvers/src/infra/dex/okx/dto.rs | 312 +
crates/solvers/src/infra/dex/okx/mod.rs | 516 +
crates/solvers/src/infra/dex/simulator.rs | 120 +
crates/solvers/src/infra/metrics.rs | 11 +
crates/solvers/src/infra/mod.rs | 2 +
crates/solvers/src/run.rs | 27 +-
crates/solvers/src/tests/bitget/api_calls.rs | 282 +
.../solvers/src/tests/bitget/market_order.rs | 382 +
crates/solvers/src/tests/bitget/mod.rs | 38 +
crates/solvers/src/tests/bitget/not_found.rs | 80 +
.../solvers/src/tests/bitget/out_of_price.rs | 96 +
crates/solvers/src/tests/mock/http.rs | 278 +
crates/solvers/src/tests/mock/mod.rs | 1 +
crates/solvers/src/tests/mod.rs | 3 +
crates/solvers/src/tests/okx/api_calls.rs | 262 +
crates/solvers/src/tests/okx/market_order.rs | 1067 ++
crates/solvers/src/tests/okx/mod.rs | 22 +
crates/solvers/src/tests/okx/not_found.rs | 287 +
crates/solvers/src/tests/okx/out_of_price.rs | 205 +
crates/solvers/src/util/bytes.rs | 12 -
crates/solvers/src/util/conv.rs | 40 +-
crates/solvers/src/util/fmt/hex.rs | 15 -
crates/solvers/src/util/fmt/mod.rs | 3 -
crates/solvers/src/util/http.rs | 152 +
crates/solvers/src/util/mod.rs | 3 +-
crates/solvers/src/util/url.rs | 0
crates/testlib/src/tokens.rs | 9 +
crates/token-info/src/lib.rs | 2 +-
crates/winner-selection/src/arbitrator.rs | 18 +-
crates/winner-selection/src/solution.rs | 22 +-
database/README.md | 24 +-
...proposed_trade_executions_by_order_uid.sql | 2 +
database/sql/V106__create_auction_orders.sql | 8 +
.../sql/V107__add_reason_to_order_events.sql | 11 +
.../V108__trade_owner_expression_index.sql | 13 +
..._order_quotes_creation_timestamp_index.sql | 3 +
docs/COW_ORDER_DEBUG_SKILL.md | 95 +-
docs/ONBOARDING.md | 205 +
docs/QUOTE_VERIFICATION_DEBUG_SKILL.md | 464 +
playground/autopilot.toml | 30 +-
playground/baseline.toml | 14 -
playground/configs/autopilot.toml | 41 +
.../configs}/baseline.toml | 0
.../local => playground/configs}/driver.toml | 0
playground/configs/orderbook.toml | 19 +
playground/docker-compose.fork.yml | 27 +-
playground/docker-compose.non-interactive.yml | 27 +-
playground/driver.toml | 29 -
playground/tempo.yaml | 12 +-
playground/test_playground.sh | 55 +-
745 files changed, 239652 insertions(+), 23229 deletions(-)
mode change 100644 => 100755 LICENSE-APACHE
mode change 100644 => 100755 LICENSE-GPL
mode change 100644 => 100755 LICENSE-MIT
create mode 100644 REVIEW.md
create mode 100644 contracts/.gitignore
create mode 100644 contracts/Cargo.lock
create mode 100644 contracts/Cargo.toml
rename {crates/contracts => contracts}/LICENSE-APACHE (100%)
rename {crates/contracts => contracts}/LICENSE-MIT (100%)
create mode 100644 contracts/README.md
rename {crates/contracts => contracts}/artifacts/AnyoneAuthenticator.json (100%)
rename {crates/contracts => contracts}/artifacts/BalancerQueries.json (99%)
rename {crates/contracts => contracts}/artifacts/BalancerV2Authorizer.json (99%)
rename {crates/contracts => contracts}/artifacts/BalancerV2BasePool.json (99%)
rename {crates/contracts => contracts}/artifacts/BalancerV2BasePoolFactory.json (96%)
rename {crates/contracts => contracts}/artifacts/BalancerV2ComposableStablePool.json (99%)
rename {crates/contracts => contracts}/artifacts/BalancerV2ComposableStablePoolFactory.json (99%)
create mode 100644 contracts/artifacts/BalancerV2ComposableStablePoolFactoryV3.json
create mode 100644 contracts/artifacts/BalancerV2ComposableStablePoolFactoryV4.json
create mode 100644 contracts/artifacts/BalancerV2ComposableStablePoolFactoryV5.json
create mode 100644 contracts/artifacts/BalancerV2ComposableStablePoolFactoryV6.json
rename {crates/contracts => contracts}/artifacts/BalancerV2LiquidityBootstrappingPool.json (99%)
rename {crates/contracts => contracts}/artifacts/BalancerV2LiquidityBootstrappingPoolFactory.json (99%)
create mode 100644 contracts/artifacts/BalancerV2NoProtocolFeeLiquidityBootstrappingPoolFactory.json
rename {crates/contracts => contracts}/artifacts/BalancerV2StablePool.json (99%)
rename {crates/contracts => contracts}/artifacts/BalancerV2StablePoolFactoryV2.json (99%)
rename {crates/contracts => contracts}/artifacts/BalancerV2Vault.json (99%)
rename {crates/contracts => contracts}/artifacts/BalancerV2WeightedPool.json (99%)
rename {crates/contracts => contracts}/artifacts/BalancerV2WeightedPool2TokensFactory.json (99%)
rename {crates/contracts => contracts}/artifacts/BalancerV2WeightedPoolFactory.json (99%)
rename {crates/contracts => contracts}/artifacts/BalancerV2WeightedPoolFactoryV3.json (99%)
create mode 100644 contracts/artifacts/BalancerV2WeightedPoolFactoryV4.json
rename {crates/contracts => contracts}/artifacts/BalancerV3BatchRouter.json (99%)
create mode 100644 contracts/artifacts/Balances.json
create mode 100644 contracts/artifacts/BaoswapRouter.json
rename {crates/contracts => contracts}/artifacts/ChainalysisOracle.json (99%)
rename {crates/contracts => contracts}/artifacts/CoWSwapEthFlow.json (99%)
rename {crates/contracts => contracts}/artifacts/CoWSwapOnchainOrders.json (100%)
rename {crates/contracts => contracts}/artifacts/Counter.json (100%)
rename {crates/contracts => contracts}/artifacts/CowAmm.json (99%)
rename {crates/contracts => contracts}/artifacts/CowAmmConstantProductFactory.json (99%)
rename {crates/contracts => contracts}/artifacts/CowAmmFactoryGetter.json (100%)
rename {crates/contracts => contracts}/artifacts/CowAmmLegacyHelper.json (99%)
rename {crates/contracts => contracts}/artifacts/CowAmmUniswapV2PriceOracle.json (99%)
rename {crates/contracts => contracts}/artifacts/CowProtocolToken.json (99%)
rename {crates/contracts => contracts}/artifacts/CowSettlementForwarder.json (100%)
rename {crates/contracts => contracts}/artifacts/ERC1271SignatureValidator.json (100%)
rename {crates/contracts => contracts}/artifacts/ERC20.json (99%)
rename {crates/contracts => contracts}/artifacts/ERC20Mintable.json (99%)
rename {crates/contracts => contracts}/artifacts/FlashLoanRouter.json (99%)
rename {crates/contracts => contracts}/artifacts/GPv2AllowListAuthentication.json (99%)
rename {crates/contracts => contracts}/artifacts/GPv2Settlement.json (99%)
rename {crates/contracts => contracts}/artifacts/GasHog.json (100%)
rename {crates/contracts => contracts}/artifacts/GnosisSafe.json (99%)
rename {crates/contracts => contracts}/artifacts/GnosisSafeCompatibilityFallbackHandler.json (99%)
rename {crates/contracts => contracts}/artifacts/GnosisSafeProxy.json (100%)
rename {crates/contracts => contracts}/artifacts/GnosisSafeProxyFactory.json (99%)
create mode 100644 contracts/artifacts/HoneyswapRouter.json
rename {crates/contracts => contracts}/artifacts/HooksTrampoline.json (100%)
rename {crates/contracts => contracts}/artifacts/ICowWrapper.json (96%)
create mode 100644 contracts/artifacts/IERC4626.json
rename {crates/contracts => contracts}/artifacts/ISwaprPair.json (99%)
rename {crates/contracts => contracts}/artifacts/IUniswapLikePair.json (99%)
rename {crates/contracts => contracts}/artifacts/IUniswapLikeRouter.json (99%)
rename {crates/contracts => contracts}/artifacts/IUniswapV3Factory.json (99%)
rename {crates/contracts => contracts}/artifacts/IZeroex.json (99%)
create mode 100644 contracts/artifacts/LiquoriceSettlement.json
create mode 100644 contracts/artifacts/MockERC4626Wrapper.json
rename {crates/contracts => contracts}/artifacts/NonStandardERC20Balances.json (100%)
create mode 100644 contracts/artifacts/PancakeRouter.json
rename {crates/contracts => contracts}/artifacts/Permit2.json (99%)
rename {crates/contracts => contracts}/artifacts/RemoteERC20Balances.json (100%)
rename {crates/contracts => contracts}/artifacts/Signatures.json (100%)
rename {crates/contracts => contracts}/artifacts/Solver.json (100%)
rename {crates/contracts => contracts}/artifacts/Spardose.json (100%)
create mode 100644 contracts/artifacts/SushiSwapRouter.json
rename {crates/contracts => contracts}/artifacts/Swapper.json (100%)
create mode 100644 contracts/artifacts/SwaprRouter.json
create mode 100644 contracts/artifacts/TestnetUniswapV2Router02.json
rename {crates/contracts => contracts}/artifacts/Trader.json (100%)
rename {crates/contracts => contracts}/artifacts/UniswapV2Factory.json (99%)
rename {crates/contracts => contracts}/artifacts/UniswapV2Router02.json (99%)
rename {crates/contracts => contracts}/artifacts/UniswapV3Pool.json (99%)
rename {crates/contracts => contracts}/artifacts/UniswapV3QuoterV2.json (99%)
rename {crates/contracts => contracts}/artifacts/UniswapV3SwapRouterV2.json (100%)
rename {crates/contracts => contracts}/artifacts/WETH9.json (99%)
rename {crates/contracts => contracts}/foundry.toml (100%)
create mode 100644 contracts/generated/.gitignore
create mode 100644 contracts/generated/Cargo.lock
create mode 100644 contracts/generated/Cargo.toml
create mode 100644 contracts/generated/contracts-facade/Cargo.toml
create mode 100644 contracts/generated/contracts-facade/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/anyoneauthenticator/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/anyoneauthenticator/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerqueries/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerqueries/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2authorizer/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2authorizer/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2basepool/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2basepool/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2basepoolfactory/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2basepoolfactory/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2composablestablepool/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2composablestablepool/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2composablestablepoolfactory/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2composablestablepoolfactory/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2composablestablepoolfactoryv3/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2composablestablepoolfactoryv3/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2composablestablepoolfactoryv4/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2composablestablepoolfactoryv4/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2composablestablepoolfactoryv5/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2composablestablepoolfactoryv5/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2composablestablepoolfactoryv6/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2composablestablepoolfactoryv6/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2liquiditybootstrappingpool/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2liquiditybootstrappingpool/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2liquiditybootstrappingpoolfactory/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2liquiditybootstrappingpoolfactory/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2noprotocolfeeliquiditybootstrappingpoolfactory/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2noprotocolfeeliquiditybootstrappingpoolfactory/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2stablepool/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2stablepool/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2stablepoolfactoryv2/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2stablepoolfactoryv2/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2vault/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2vault/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2weightedpool/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2weightedpool/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2weightedpool2tokensfactory/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2weightedpool2tokensfactory/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2weightedpoolfactory/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2weightedpoolfactory/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2weightedpoolfactoryv3/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2weightedpoolfactoryv3/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv2weightedpoolfactoryv4/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv2weightedpoolfactoryv4/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balancerv3batchrouter/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balancerv3batchrouter/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/balances/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/balances/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/baoswaprouter/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/baoswaprouter/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/chainalysisoracle/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/chainalysisoracle/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/counter/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/counter/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/cowamm/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/cowamm/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/cowammconstantproductfactory/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/cowammconstantproductfactory/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/cowammfactorygetter/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/cowammfactorygetter/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/cowammlegacyhelper/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/cowammlegacyhelper/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/cowammuniswapv2priceoracle/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/cowammuniswapv2priceoracle/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/cowprotocoltoken/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/cowprotocoltoken/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/cowsettlementforwarder/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/cowsettlementforwarder/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/cowswapethflow/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/cowswapethflow/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/cowswaponchainorders/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/cowswaponchainorders/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/erc1271signaturevalidator/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/erc1271signaturevalidator/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/erc20/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/erc20/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/erc20mintable/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/erc20mintable/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/flashloanrouter/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/flashloanrouter/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/gashog/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/gashog/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/gnosissafe/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/gnosissafe/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/gnosissafecompatibilityfallbackhandler/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/gnosissafecompatibilityfallbackhandler/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/gnosissafeproxy/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/gnosissafeproxy/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/gnosissafeproxyfactory/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/gnosissafeproxyfactory/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/gpv2allowlistauthentication/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/gpv2allowlistauthentication/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/gpv2settlement/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/gpv2settlement/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/honeyswaprouter/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/honeyswaprouter/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/hookstrampoline/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/hookstrampoline/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/icowwrapper/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/icowwrapper/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/ierc4626/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/ierc4626/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/iswaprpair/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/iswaprpair/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/iuniswaplikepair/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/iuniswaplikepair/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/iuniswaplikerouter/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/iuniswaplikerouter/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/iuniswapv3factory/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/iuniswapv3factory/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/izeroex/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/izeroex/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/liquoricesettlement/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/liquoricesettlement/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/mockerc4626wrapper/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/mockerc4626wrapper/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/nonstandarderc20balances/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/nonstandarderc20balances/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/pancakerouter/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/pancakerouter/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/permit2/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/permit2/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/remoteerc20balances/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/remoteerc20balances/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/signatures/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/signatures/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/solver/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/solver/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/spardose/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/spardose/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/sushiswaprouter/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/sushiswaprouter/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/swapper/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/swapper/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/swaprrouter/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/swaprrouter/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/testnetuniswapv2router02/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/testnetuniswapv2router02/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/trader/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/trader/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/uniswapv2factory/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/uniswapv2factory/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/uniswapv2router02/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/uniswapv2router02/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/uniswapv3pool/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/uniswapv3pool/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/uniswapv3quoterv2/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/uniswapv3quoterv2/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/uniswapv3swaprouterv2/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/uniswapv3swaprouterv2/src/lib.rs
create mode 100644 contracts/generated/contracts-generated/weth9/Cargo.toml
create mode 100644 contracts/generated/contracts-generated/weth9/src/lib.rs
create mode 100644 contracts/generated/rustfmt.toml
rename {crates/contracts => contracts}/script/DeployBalances.s.sol (100%)
rename {crates/contracts => contracts}/script/DeploySignatures.s.sol (100%)
rename {crates/contracts => contracts}/solidity/AnyoneAuthenticator.sol (100%)
rename {crates/contracts => contracts}/solidity/Balances.sol (95%)
rename {crates/contracts => contracts}/solidity/CowSettlementForwarder.sol (100%)
rename {crates/contracts => contracts}/solidity/Makefile (97%)
rename {crates/contracts => contracts}/solidity/README.md (100%)
rename {crates/contracts => contracts}/solidity/Signatures.sol (100%)
rename {crates/contracts => contracts}/solidity/Solver.sol (100%)
rename {crates/contracts => contracts}/solidity/Spardose.sol (100%)
rename {crates/contracts => contracts}/solidity/Swapper.sol (100%)
rename {crates/contracts => contracts}/solidity/Trader.sol (100%)
rename {crates/contracts => contracts}/solidity/interfaces/IERC1271.sol (100%)
rename {crates/contracts => contracts}/solidity/interfaces/IERC20.sol (100%)
create mode 100644 contracts/solidity/interfaces/IERC4626.sol
rename {crates/contracts => contracts}/solidity/interfaces/ISettlement.sol (100%)
rename {crates/contracts => contracts}/solidity/interfaces/IStorageAccessible.sol (100%)
rename {crates/contracts => contracts}/solidity/interfaces/IVault.sol (100%)
rename {crates/contracts => contracts}/solidity/interfaces/IVaultRelayer.sol (100%)
rename {crates/contracts => contracts}/solidity/libraries/Caller.sol (100%)
rename {crates/contracts => contracts}/solidity/libraries/Math.sol (100%)
rename {crates/contracts => contracts}/solidity/libraries/SafeERC20.sol (100%)
rename {crates/contracts => contracts}/solidity/tests/Counter.sol (100%)
rename {crates/contracts => contracts}/solidity/tests/GasHog.sol (100%)
create mode 100644 contracts/solidity/tests/MockERC4626Wrapper.sol
rename {crates/contracts => contracts}/solidity/tests/NonStandardERC20Balances.sol (100%)
rename {crates/contracts => contracts}/solidity/tests/RemoteERC20Balances.sol (100%)
create mode 100644 contracts/src/codegen.rs
create mode 100644 contracts/src/main.rs
create mode 100644 contracts/src/networks.rs
rename {crates/contracts/src/bin => contracts/src}/vendor.rs (87%)
create mode 100644 crates/autopilot/src/domain/blockchain.rs
delete mode 100644 crates/autopilot/src/domain/eth/mod.rs
create mode 100644 crates/balance-overrides/src/aave.rs
create mode 100644 crates/configs/src/autopilot/cow_amm.rs
create mode 100644 crates/configs/src/autopilot/ethflow.rs
rename crates/{autopilot/src/config => configs/src/autopilot}/fee_policy.rs (93%)
rename crates/{autopilot/src/config => configs/src/autopilot}/mod.rs (61%)
rename crates/{autopilot/src/config => configs/src/autopilot}/native_price.rs (81%)
rename crates/{autopilot/src/config => configs/src/autopilot}/order_events_cleanup.rs (96%)
create mode 100644 crates/configs/src/autopilot/run_loop.rs
rename crates/{autopilot/src/config => configs/src/autopilot}/s3.rs (96%)
rename crates/{autopilot/src/config => configs/src/autopilot}/solver.rs (89%)
rename crates/{autopilot/src/config => configs/src/autopilot}/trusted_tokens.rs (96%)
create mode 100644 crates/configs/src/balance_overrides.rs
rename crates/{autopilot/src/config => configs/src}/banned_users.rs (88%)
create mode 100644 crates/configs/src/fee_factor.rs
create mode 100644 crates/configs/src/gas_price_estimation.rs
create mode 100644 crates/configs/src/http_client.rs
create mode 100644 crates/configs/src/native_price.rs
create mode 100644 crates/configs/src/native_price_estimators.rs
create mode 100644 crates/configs/src/order_quoting.rs
rename crates/{orderbook/src/config => configs/src/orderbook}/ipfs.rs (78%)
rename crates/{orderbook/src/config => configs/src/orderbook}/mod.rs (67%)
rename crates/{orderbook/src/config => configs/src/orderbook}/native_price.rs (82%)
rename crates/{orderbook/src/config => configs/src/orderbook}/order_validation.rs (89%)
create mode 100644 crates/configs/src/price_estimation.rs
create mode 100644 crates/configs/src/rate_limit.rs
create mode 100644 crates/configs/src/shared.rs
create mode 100644 crates/configs/src/simulator.rs
delete mode 100644 crates/contracts/.gitignore
delete mode 100644 crates/contracts/Cargo.toml
delete mode 100644 crates/contracts/README.md
delete mode 120000 crates/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV3.json
delete mode 120000 crates/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV4.json
delete mode 120000 crates/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV5.json
delete mode 120000 crates/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV6.json
delete mode 120000 crates/contracts/artifacts/BalancerV2NoProtocolFeeLiquidityBootstrappingPoolFactory.json
delete mode 120000 crates/contracts/artifacts/BalancerV2WeightedPoolFactoryV4.json
delete mode 100644 crates/contracts/artifacts/Balances.json
delete mode 120000 crates/contracts/artifacts/BaoswapRouter.json
delete mode 120000 crates/contracts/artifacts/HoneyswapRouter.json
delete mode 100644 crates/contracts/artifacts/LiquoriceSettlement.json
delete mode 120000 crates/contracts/artifacts/PancakeRouter.json
delete mode 120000 crates/contracts/artifacts/SushiSwapRouter.json
delete mode 120000 crates/contracts/artifacts/SwaprRouter.json
delete mode 120000 crates/contracts/artifacts/TestnetUniswapV2Router02.json
delete mode 100644 crates/contracts/build.rs
delete mode 100644 crates/contracts/rustfmt.toml
delete mode 100644 crates/contracts/src/lib.rs
create mode 100644 crates/driver/src/domain/blockchain.rs
delete mode 100644 crates/driver/src/domain/eth/mod.rs
create mode 100644 crates/driver/src/domain/flashloan.rs
create mode 100644 crates/driver/src/domain/interaction.rs
create mode 100644 crates/driver/src/infra/api/extract.rs
delete mode 100644 crates/driver/src/infra/simulator/enso/dto.rs
delete mode 100644 crates/driver/src/infra/simulator/enso/mod.rs
delete mode 100644 crates/driver/src/infra/simulator/tenderly/dto.rs
delete mode 100644 crates/driver/src/infra/simulator/tenderly/mod.rs
create mode 100644 crates/driver/src/tests/cases/gas_fee_override.rs
create mode 100644 crates/e2e/tests/e2e/contract_revert.rs
create mode 100644 crates/e2e/tests/e2e/debug_order.rs
create mode 100644 crates/e2e/tests/e2e/eip4626.rs
create mode 100644 crates/e2e/tests/e2e/order_simulation.rs
create mode 100644 crates/eth-domain-types/Cargo.toml
create mode 100644 crates/eth-domain-types/src/access_list.rs
rename crates/{driver/src/domain/eth => eth-domain-types/src}/allowance.rs (98%)
rename crates/{driver/src/domain/eth => eth-domain-types/src}/eip712.rs (100%)
create mode 100644 crates/eth-domain-types/src/ether.rs
rename crates/{driver/src/domain/eth => eth-domain-types/src}/gas.rs (90%)
create mode 100644 crates/eth-domain-types/src/lib.rs
create mode 100644 crates/eth-domain-types/src/token_amount.rs
create mode 100644 crates/http-client/Cargo.toml
rename crates/{shared/src/http_client.rs => http-client/src/lib.rs} (65%)
create mode 100644 crates/model/src/debug_report.rs
create mode 100644 crates/orderbook/src/api/debug_order.rs
create mode 100644 crates/orderbook/src/api/debug_simulation.rs
delete mode 100644 crates/orderbook/src/config/banned_users.rs
create mode 100644 crates/orderbook/src/database/debug_report.rs
create mode 100644 crates/price-estimation/src/config/price_estimation.rs
create mode 100644 crates/price-estimation/src/native/eip4626.rs
delete mode 100644 crates/price-estimation/src/trade_verifier/tenderly_api.rs
delete mode 100644 crates/shared/src/encoded_settlement.rs
create mode 100644 crates/simulator/Cargo.toml
create mode 100644 crates/simulator/src/encoding.rs
create mode 100644 crates/simulator/src/ethereum/contracts.rs
create mode 100644 crates/simulator/src/ethereum/mod.rs
rename crates/{driver/src/infra/simulator/mod.rs => simulator/src/lib.rs} (61%)
create mode 100644 crates/simulator/src/simulation_builder.rs
create mode 100644 crates/simulator/src/tenderly/dto.rs
create mode 100644 crates/simulator/src/tenderly/mod.rs
create mode 100644 crates/simulator/src/utils/mod.rs
create mode 100644 crates/solvers/config/example.bitget.toml
create mode 100644 crates/solvers/config/example.okx.toml
create mode 100644 crates/solvers/src/domain/dex/minimum_surplus.rs
create mode 100644 crates/solvers/src/domain/dex/mod.rs
create mode 100644 crates/solvers/src/domain/dex/shared.rs
create mode 100644 crates/solvers/src/domain/dex/slippage.rs
create mode 100644 crates/solvers/src/domain/eth/chain.rs
rename crates/solvers/src/domain/{solver.rs => solver/baseline.rs} (98%)
create mode 100644 crates/solvers/src/domain/solver/dex/fills.rs
create mode 100644 crates/solvers/src/domain/solver/dex/mod.rs
create mode 100644 crates/solvers/src/domain/solver/mod.rs
create mode 100644 crates/solvers/src/infra/blockchain.rs
rename crates/solvers/src/infra/{config.rs => config/baseline.rs} (83%)
create mode 100644 crates/solvers/src/infra/config/dex/bitget/file.rs
create mode 100644 crates/solvers/src/infra/config/dex/bitget/mod.rs
create mode 100644 crates/solvers/src/infra/config/dex/file.rs
create mode 100644 crates/solvers/src/infra/config/dex/mod.rs
create mode 100644 crates/solvers/src/infra/config/dex/okx/file.rs
create mode 100644 crates/solvers/src/infra/config/dex/okx/mod.rs
create mode 100644 crates/solvers/src/infra/config/mod.rs
create mode 100644 crates/solvers/src/infra/dex/bitget/dto.rs
create mode 100644 crates/solvers/src/infra/dex/bitget/mod.rs
create mode 100644 crates/solvers/src/infra/dex/mod.rs
create mode 100644 crates/solvers/src/infra/dex/okx/dto.rs
create mode 100644 crates/solvers/src/infra/dex/okx/mod.rs
create mode 100644 crates/solvers/src/infra/dex/simulator.rs
create mode 100644 crates/solvers/src/tests/bitget/api_calls.rs
create mode 100644 crates/solvers/src/tests/bitget/market_order.rs
create mode 100644 crates/solvers/src/tests/bitget/mod.rs
create mode 100644 crates/solvers/src/tests/bitget/not_found.rs
create mode 100644 crates/solvers/src/tests/bitget/out_of_price.rs
create mode 100644 crates/solvers/src/tests/mock/http.rs
create mode 100644 crates/solvers/src/tests/mock/mod.rs
create mode 100644 crates/solvers/src/tests/okx/api_calls.rs
create mode 100644 crates/solvers/src/tests/okx/market_order.rs
create mode 100644 crates/solvers/src/tests/okx/mod.rs
create mode 100644 crates/solvers/src/tests/okx/not_found.rs
create mode 100644 crates/solvers/src/tests/okx/out_of_price.rs
delete mode 100644 crates/solvers/src/util/bytes.rs
delete mode 100644 crates/solvers/src/util/fmt/hex.rs
delete mode 100644 crates/solvers/src/util/fmt/mod.rs
create mode 100644 crates/solvers/src/util/http.rs
delete mode 100644 crates/solvers/src/util/url.rs
create mode 100644 database/sql/V105__index_proposed_trade_executions_by_order_uid.sql
create mode 100644 database/sql/V106__create_auction_orders.sql
create mode 100644 database/sql/V107__add_reason_to_order_events.sql
create mode 100644 database/sql/V108__trade_owner_expression_index.sql
create mode 100644 database/sql/V109__order_quotes_creation_timestamp_index.sql
create mode 100644 docs/ONBOARDING.md
create mode 100644 docs/QUOTE_VERIFICATION_DEBUG_SKILL.md
delete mode 100644 playground/baseline.toml
create mode 100644 playground/configs/autopilot.toml
rename {configs/local => playground/configs}/baseline.toml (100%)
rename {configs/local => playground/configs}/driver.toml (100%)
create mode 100644 playground/configs/orderbook.toml
delete mode 100644 playground/driver.toml
diff --git a/.cargo/audit.toml b/.cargo/audit.toml
index 76d2d8df83..8690df36b1 100644
--- a/.cargo/audit.toml
+++ b/.cargo/audit.toml
@@ -5,14 +5,6 @@
[advisories]
# Known vulnerabilities that are tracked in https://github.com/cowprotocol/services/issues/3338
ignore = [
- # idna - Punycode label vulnerability (RUSTSEC-2024-0421)
- # Needs upgrade to 1.0.0+ (transitive dependency)
- "RUSTSEC-2024-0421",
-
- # protobuf - Uncontrolled recursion (RUSTSEC-2024-0437)
- # Needs upgrade to 3.7.2+ (transitive dependency)
- "RUSTSEC-2024-0437",
-
# rsa - Marvin Attack timing sidechannel (RUSTSEC-2023-0071)
# No patch available yet (cryptography vulnerability)
"RUSTSEC-2023-0071",
diff --git a/.claude/commands/debug-order.md b/.claude/commands/debug-order.md
index 92708aadc9..359648cf0a 100644
--- a/.claude/commands/debug-order.md
+++ b/.claude/commands/debug-order.md
@@ -8,11 +8,21 @@ Read and follow the instructions in ./docs/COW_ORDER_DEBUG_SKILL.md to investiga
Key steps:
1. Parse the order UID and network from arguments (default: mainnet)
-2. Fetch order data from API to get status and details
-3. Check order_events in DB for lifecycle events
-4. Search Victoria Logs for the order UID
+2. **Start with the debug endpoint** — fetch the comprehensive debug report first:
+ ```bash
+ source .env.claude && curl -s -H "X-API-Key: $COW_DEBUG_API_KEY" "https://partners.cow.fi/$NETWORK/restricted/api/v1/debug/order/$ORDER_UID" | jq .
+ ```
+ This returns order details, lifecycle events, auction participation, proposed solutions, executions, trades, and settlement attempts — all in one call.
+3. Analyze the debug report — key event meanings:
+ - `ready` = order made it into an auction (was sent to solvers)
+ - `considered` = a solver included this order in a solution but that solution didn't win
+ - `executing` = order is in the winning solution, being submitted on-chain
+ - `traded` = order was settled on-chain
+ - `filtered` / `invalid` = order was excluded (check the `reason` field)
+4. Search Victoria Logs for additional context (filter reasons, error details, solver logs)
- For finding discarded solutions where the order UID appears in calldata, use regex: `.*ORDER_UID_WITHOUT_0X.*` plus `discarded`
-5. Identify root cause and report findings with evidence
-6. If you haven't found anything go wild and try all SQL / log searches / codebase searches you can think of
+5. Use DB queries or API calls only if the debug report is missing info or you need deeper investigation
+6. Identify root cause and report findings with evidence
+7. If you haven't found anything go wild and try all SQL / log searches / codebase searches you can think of
Always show your evidence (log lines, DB results, API responses) when presenting findings.
diff --git a/CLAUDE.md b/CLAUDE.md
index a03abd0c06..45269b7fd2 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -105,6 +105,7 @@ User signs order → Orderbook validates → Autopilot includes in auction
- Spot format: `cargo +nightly fmt -- ` (never call stable `cargo fmt`)
- Lint: `cargo clippy --locked --workspace --all-features --all-targets -- -D warnings`
- Check format: `cargo +nightly fmt --all -- --check`
+- Only format **after** as a final step! — i.e. after checking compilation, running tests, etc.
### Local Development Environment
- Start local PostgreSQL: `docker compose up -d`
@@ -181,26 +182,55 @@ Databases: `mainnet`, `arbitrum-one`, `base`, `linea`, `polygon`, `xdai`, `sepol
Use `$ETH_MAINNET_RPC` from `.env.claude` for mainnet. Use `cast` or whatever tools you want freely.
-## Grafana Logs Access
+## Victoria Logs Access
-Use the `scripts/vlogs` wrapper to query Victoria Logs.
+Use the `CoW-Prod` MCP tools to query Victoria Logs directly.
-**IMPORTANT**: When running `scripts/vlogs`, do NOT use bash comments before the command (e.g., `# comment\nscripts/vlogs ...`) as this causes unnecessary permission prompts. Just run the command directly.
+**Timestamps**: MCP requires RFC3339 format (e.g., `2026-04-09T00:00:00Z`). Compute absolute timestamps from the current date rather than using relative time.
-**IMPORTANT**: Order UIDs and other structured fields (like `quote_id`, `auction_id`) live inside the `all` field in Victoria Logs. You MUST prefix them with `all:` to match. Plain text terms (like `order created`, `filtered`) match the log message directly and don't need the prefix.
+**IMPORTANT**: Order UIDs and other structured fields (like `quote_id`, `auction_id`) live inside the `all` field in Victoria Logs. You MUST prefix them with `all:` to match. Plain text terms (like `order created`, `filtered`) match the log message directly and don't need the prefix. You can also use parsed fields directly (e.g., `parsed.fields.order_uid:0x...`) for more precise matching.
-```bash
-scripts/vlogs "" [--from ] [--to ] [--max ] [--env ] [--raw]
+**IMPORTANT — Protect context window**: Raw log entries contain ~4KB of kubernetes/ec2 metadata each. **Always** append `| fields _time, _msg, all` (or specific `parsed.fields.*`) to strip noise. Use small `limit` values (10-20) and only increase if needed. Examples:
+- General order search: `... | fields _time, _msg, all`
+- When you only need specific parsed fields: `... | fields _time, _msg, parsed.fields.err, parsed.fields.driver, parsed.spans.auction.auction_id`
-scripts/vlogs "NOT container:controller order created all:0xabc..." --from now-24h
-scripts/vlogs "NOT container:controller network:mainnet settlement failed" --from now-6h --max 50
-scripts/vlogs "error" --env staging --from now-1h
-scripts/vlogs "NOT container:controller all:0xabc..." --raw
-```
+**Available MCP tools:**
+- `victorialogs_query` — Main log search (LogsQL expression + time range + limit)
+- `victorialogs_hits` — Count matching logs grouped by time buckets
+- `victorialogs_field_names` / `victorialogs_field_values` — Explore available fields
+- `victorialogs_facets` — Most frequent values per field
+- `victorialogs_stats_query` / `victorialogs_stats_query_range` — Aggregation queries
+- `victorialogs_stream_field_names` / `victorialogs_stream_field_values` — Stream metadata
-Defaults: `--from now-12h`, `--to now`, `--max 100`, `--env prod`
+**Key fields:**
+- Stream fields (efficient filters): `container`, `namespace`, `pod`
+- `network` — chain name (mainnet, arbitrum-one, base, etc.)
+- `all` — full structured JSON log (search with `all:` prefix for UIDs)
+- `parsed.fields.*` — individual parsed fields (e.g., `parsed.fields.order_uid`, `parsed.fields.quote_id`)
+- `_msg` — the log message text
-Datasource UIDs (hardcoded in script): `vm-auth-prod` (production), `vm-auth-staging` (staging)
+**Example queries:**
+```
+# Search for order logs (exclude nginx controller, strip metadata)
+query: "container:!controller AND network:mainnet AND all:0xabc... | fields _time, _msg, all"
+start: ""
+limit: 20
+
+# Search for order creation on mainnet
+query: "container:!controller AND network:mainnet AND \"order created\" AND all:0xabc... | fields _time, _msg, all"
+start: ""
+limit: 10
+
+# Settlement failures with just error details
+query: "container:!controller AND network:mainnet AND \"settlement failed\" | fields _time, _msg, parsed.fields.err, parsed.fields.driver, parsed.spans.auction.auction_id"
+start: ""
+limit: 10
+
+# Sort results by time
+query: "container:!controller AND network:mainnet AND all:0xabc... | fields _time, _msg, all | sort by (_time) asc"
+start: ""
+limit: 20
+```
## Etherscan API (V2)
diff --git a/Cargo.lock b/Cargo.lock
index 2a0e6d2759..66ac2aa3c5 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -83,9 +83,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
[[package]]
name = "alloy"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4973038846323e4e69a433916522195dce2947770076c03078fc21c80ea0f1c4"
+checksum = "50ab0cd8afe573d1f7dc2353698a51b1f93aec362c8211e28cfd3948c6adba39"
dependencies = [
"alloy-consensus",
"alloy-contract",
@@ -118,9 +118,9 @@ dependencies = [
[[package]]
name = "alloy-consensus"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0c0dc44157867da82c469c13186015b86abef209bf0e41625e4b68bac61d728"
+checksum = "7f16daaf7e1f95f62c6c3bf8a3fc3d78b08ae9777810c0bb5e94966c7cd57ef0"
dependencies = [
"alloy-eips",
"alloy-primitives",
@@ -145,9 +145,9 @@ dependencies = [
[[package]]
name = "alloy-consensus-any"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba4cdb42df3871cd6b346d6a938ec2ba69a9a0f49d1f82714bc5c48349268434"
+checksum = "118998d9015332ab1b4720ae1f1e3009491966a0349938a1f43ff45a8a4c6299"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -159,9 +159,9 @@ dependencies = [
[[package]]
name = "alloy-contract"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca63b7125a981415898ffe2a2a696c83696c9c6bdb1671c8a912946bbd8e49e7"
+checksum = "7ac9e0c34dc6bce643b182049cdfcca1b8ce7d9c260cbdd561f511873b7e26cd"
dependencies = [
"alloy-consensus",
"alloy-dyn-abi",
@@ -177,13 +177,14 @@ dependencies = [
"futures-util",
"serde_json",
"thiserror 2.0.17",
+ "tracing",
]
[[package]]
name = "alloy-core"
-version = "1.5.2"
+version = "1.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d4087016b0896051dd3d03e0bedda2f4d4d1689af8addc8450288c63a9e5f68"
+checksum = "23e8604b0c092fabc80d075ede181c9b9e596249c70b99253082d7e689836529"
dependencies = [
"alloy-dyn-abi",
"alloy-json-abi",
@@ -261,9 +262,9 @@ dependencies = [
[[package]]
name = "alloy-eips"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9f7ef09f21bd1e9cb8a686f168cb4a206646804567f0889eadb8dcc4c9288c8"
+checksum = "e6ef28c9fdad22d4eec52d894f5f2673a0895f1e5ef196734568e68c0f6caca8"
dependencies = [
"alloy-eip2124",
"alloy-eip2930",
@@ -280,7 +281,6 @@ dependencies = [
"serde",
"serde_with",
"sha2",
- "thiserror 2.0.17",
]
[[package]]
@@ -297,9 +297,9 @@ dependencies = [
[[package]]
name = "alloy-json-rpc"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff42cd777eea61f370c0b10f2648a1c81e0b783066cd7269228aa993afd487f7"
+checksum = "422d110f1c40f1f8d0e5562b0b649c35f345fccb7093d9f02729943dcd1eef71"
dependencies = [
"alloy-primitives",
"alloy-sol-types",
@@ -312,9 +312,9 @@ dependencies = [
[[package]]
name = "alloy-network"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8cbca04f9b410fdc51aaaf88433cbac761213905a65fe832058bcf6690585762"
+checksum = "7197a66d94c4de1591cdc16a9bcea5f8cccd0da81b865b49aef97b1b4016e0fa"
dependencies = [
"alloy-consensus",
"alloy-consensus-any",
@@ -338,9 +338,9 @@ dependencies = [
[[package]]
name = "alloy-network-primitives"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42d6d15e069a8b11f56bef2eccbad2a873c6dd4d4c81d04dda29710f5ea52f04"
+checksum = "eb82711d59a43fdfd79727c99f270b974c784ec4eb5728a0d0d22f26716c87ef"
dependencies = [
"alloy-consensus",
"alloy-eips",
@@ -369,7 +369,7 @@ dependencies = [
"keccak-asm",
"paste",
"proptest",
- "rand 0.9.2",
+ "rand 0.9.4",
"rapidhash",
"ruint",
"rustc-hash",
@@ -379,9 +379,9 @@ dependencies = [
[[package]]
name = "alloy-provider"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d181c8cc7cf4805d7e589bf4074d56d55064fa1a979f005a45a62b047616d870"
+checksum = "bf6b18b929ef1d078b834c3631e9c925177f3b23ddc6fa08a722d13047205876"
dependencies = [
"alloy-chains",
"alloy-consensus",
@@ -409,10 +409,10 @@ dependencies = [
"either",
"futures",
"futures-utils-wasm",
- "lru 0.16.3",
+ "lru",
"parking_lot",
"pin-project",
- "reqwest 0.12.28",
+ "reqwest 0.13.2",
"serde",
"serde_json",
"thiserror 2.0.17",
@@ -424,9 +424,9 @@ dependencies = [
[[package]]
name = "alloy-pubsub"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8bd82953194dec221aa4cbbbb0b1e2df46066fe9d0333ac25b43a311e122d13"
+checksum = "5ad54073131e7292d4e03e1aa2287730f737280eb160d8b579fb31939f558c11"
dependencies = [
"alloy-json-rpc",
"alloy-primitives",
@@ -468,9 +468,9 @@ dependencies = [
[[package]]
name = "alloy-rpc-client"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2792758a93ae32a32e9047c843d536e1448044f78422d71bf7d7c05149e103f"
+checksum = "94fcc9604042ca80bd37aa5e232ea1cd851f337e31e2babbbb345bc0b1c30de3"
dependencies = [
"alloy-json-rpc",
"alloy-primitives",
@@ -480,7 +480,7 @@ dependencies = [
"alloy-transport-ws",
"futures",
"pin-project",
- "reqwest 0.12.28",
+ "reqwest 0.13.2",
"serde",
"serde_json",
"tokio",
@@ -493,9 +493,9 @@ dependencies = [
[[package]]
name = "alloy-rpc-types"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7bdcbf9dfd5eea8bfeb078b1d906da8cd3a39c4d4dbe7a628025648e323611f6"
+checksum = "4faad925d3a669ffc15f43b3deec7fbdf2adeb28a4d6f9cf4bc661698c0f8f4b"
dependencies = [
"alloy-primitives",
"alloy-rpc-types-anvil",
@@ -509,9 +509,9 @@ dependencies = [
[[package]]
name = "alloy-rpc-types-anvil"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0a3100b76987c1b1dc81f3abe592b7edc29e92b1242067a69d65e0030b35cf9"
+checksum = "47df51bedb3e6062cb9981187a51e86d0d64a4de66eb0855e9efe6574b044ddf"
dependencies = [
"alloy-primitives",
"alloy-rpc-types-eth",
@@ -521,9 +521,9 @@ dependencies = [
[[package]]
name = "alloy-rpc-types-any"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd720b63f82b457610f2eaaf1f32edf44efffe03ae25d537632e7d23e7929e1a"
+checksum = "3823026d1ed239a40f12364fac50726c8daf1b6ab8077a97212c5123910429ed"
dependencies = [
"alloy-consensus-any",
"alloy-rpc-types-eth",
@@ -532,9 +532,9 @@ dependencies = [
[[package]]
name = "alloy-rpc-types-debug"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1b21e1ad18ff1b31ff1030e046462ab8168cf8894e6778cd805c8bdfe2bd649"
+checksum = "2145138f3214928f08cd13da3cb51ef7482b5920d8ac5a02ecd4e38d1a8f6d1e"
dependencies = [
"alloy-primitives",
"derive_more 2.1.1",
@@ -544,9 +544,9 @@ dependencies = [
[[package]]
name = "alloy-rpc-types-eth"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b2dc411f13092f237d2bf6918caf80977fc2f51485f9b90cb2a2f956912c8c9"
+checksum = "59c095f92c4e1ff4981d89e9aa02d5f98c762a1980ab66bec49c44be11349da2"
dependencies = [
"alloy-consensus",
"alloy-consensus-any",
@@ -565,9 +565,9 @@ dependencies = [
[[package]]
name = "alloy-rpc-types-trace"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ad79f1e27e161943b5a4f99fe5534ef0849876214be411e0032c12f38e94daa"
+checksum = "2e5a4d010f86cd4e01e5205ec273911e538e1738e76d8bafe9ecd245910ea5a3"
dependencies = [
"alloy-primitives",
"alloy-rpc-types-eth",
@@ -579,9 +579,9 @@ dependencies = [
[[package]]
name = "alloy-rpc-types-txpool"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d459f902a2313737bc66d18ed094c25d2aeb268b74d98c26bbbda2aa44182ab0"
+checksum = "942d26a2ca8891b26de4a8529d21091e21c1093e27eb99698f1a86405c76b1ff"
dependencies = [
"alloy-primitives",
"alloy-rpc-types-eth",
@@ -591,9 +591,9 @@ dependencies = [
[[package]]
name = "alloy-serde"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2ce1e0dbf7720eee747700e300c99aac01b1a95bb93f493a01e78ee28bb1a37"
+checksum = "11ece63b89294b8614ab3f483560c08d016930f842bf36da56bf0b764a15c11e"
dependencies = [
"alloy-primitives",
"serde",
@@ -602,9 +602,9 @@ dependencies = [
[[package]]
name = "alloy-signer"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2425c6f314522c78e8198979c8cbf6769362be4da381d4152ea8eefce383535d"
+checksum = "43f447aefab0f1c0649f71edc33f590992d4e122bc35fb9cdbbf67d4421ace85"
dependencies = [
"alloy-dyn-abi",
"alloy-primitives",
@@ -619,9 +619,9 @@ dependencies = [
[[package]]
name = "alloy-signer-aws"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e38b411077d7b17e464de7dfa599f5b94161cdffc25c2f28a90a3a345b6d6490"
+checksum = "8194c416115dc27f03796c0075dee0731239e2d7fbce735a74894aa8f6a47d7d"
dependencies = [
"alloy-consensus",
"alloy-network",
@@ -638,9 +638,9 @@ dependencies = [
[[package]]
name = "alloy-signer-local"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3ecb71ee53d8d9c3fa7bac17542c8116ebc7a9726c91b1bf333ec3d04f5a789"
+checksum = "f721f4bf2e4812e5505aaf5de16ef3065a8e26b9139ac885862d00b5a55a659a"
dependencies = [
"alloy-consensus",
"alloy-network",
@@ -730,9 +730,9 @@ dependencies = [
[[package]]
name = "alloy-transport"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa186e560d523d196580c48bf00f1bf62e63041f28ecf276acc22f8b27bb9f53"
+checksum = "8098f965442a9feb620965ba4b4be5e2b320f4ec5a3fff6bfa9e1ff7ef42bed1"
dependencies = [
"alloy-json-rpc",
"auto_impl",
@@ -753,14 +753,14 @@ dependencies = [
[[package]]
name = "alloy-transport-http"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa501ad58dd20acddbfebc65b52e60f05ebf97c52fa40d1b35e91f5e2da0ad0e"
+checksum = "e8597d36d546e1dab822345ad563243ec3920e199322cb554ce56c8ef1a1e2e7"
dependencies = [
"alloy-json-rpc",
"alloy-transport",
"itertools 0.14.0",
- "reqwest 0.12.28",
+ "reqwest 0.13.2",
"serde_json",
"tower 0.5.3",
"tracing",
@@ -769,18 +769,20 @@ dependencies = [
[[package]]
name = "alloy-transport-ws"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9f00445db69d63298e2b00a0ea1d859f00e6424a3144ffc5eba9c31da995e16"
+checksum = "ec3ab7a72b180992881acc112628b7668337a19ce15293ee974600ea7b693691"
dependencies = [
"alloy-pubsub",
"alloy-transport",
"futures",
"http 1.4.0",
+ "rustls",
"serde_json",
"tokio",
"tokio-tungstenite",
"tracing",
+ "url",
"ws_stream_wasm",
]
@@ -802,11 +804,11 @@ dependencies = [
[[package]]
name = "alloy-tx-macros"
-version = "1.7.3"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fa0c53e8c1e1ef4d01066b01c737fb62fc9397ab52c6e7bb5669f97d281b9bc"
+checksum = "d69722eddcdf1ce096c3ab66cf8116999363f734eb36fe94a148f4f71c85da84"
dependencies = [
- "darling 0.21.3",
+ "darling 0.23.0",
"proc-macro2",
"quote",
"syn 2.0.114",
@@ -857,7 +859,7 @@ version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
dependencies = [
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -868,7 +870,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
dependencies = [
"anstyle",
"once_cell_polyfill",
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -1224,11 +1226,13 @@ dependencies = [
"dashmap",
"database",
"derive_more 1.0.0",
+ "eth-domain-types",
"ethrpc",
"event-indexing",
"futures",
"gas-price-estimation",
"hex-literal",
+ "http-client",
"humantime",
"humantime-serde",
"indexmap 2.13.0",
@@ -1244,7 +1248,7 @@ dependencies = [
"price-estimation",
"prometheus",
"prometheus-metric-storage",
- "rand 0.8.5",
+ "rand 0.9.4",
"reqwest 0.13.2",
"rust_decimal",
"s3",
@@ -1252,6 +1256,7 @@ dependencies = [
"serde_json",
"serde_with",
"shared",
+ "simulator",
"sqlx",
"strum",
"tempfile",
@@ -1271,9 +1276,9 @@ dependencies = [
[[package]]
name = "aws-config"
-version = "1.8.12"
+version = "1.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96571e6996817bf3d58f6b569e4b9fd2e9d2fcf9f7424eed07b2ce9bb87535e5"
+checksum = "11493b0bad143270fb8ad284a096dd529ba91924c5409adeac856cc1bf047dbc"
dependencies = [
"aws-credential-types",
"aws-runtime",
@@ -1291,7 +1296,7 @@ dependencies = [
"fastrand",
"hex",
"http 1.4.0",
- "ring",
+ "sha1",
"time",
"tokio",
"tracing",
@@ -1301,9 +1306,9 @@ dependencies = [
[[package]]
name = "aws-credential-types"
-version = "1.2.11"
+version = "1.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3cd362783681b15d136480ad555a099e82ecd8e2d10a841e14dfd0078d67fee3"
+checksum = "8f20799b373a1be121fe3005fba0c2090af9411573878f224df44b42727fcaf7"
dependencies = [
"aws-smithy-async",
"aws-smithy-runtime-api",
@@ -1313,9 +1318,9 @@ dependencies = [
[[package]]
name = "aws-lc-rs"
-version = "1.15.2"
+version = "1.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a88aab2464f1f25453baa7a07c84c5b7684e274054ba06817f382357f77a288"
+checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc"
dependencies = [
"aws-lc-sys",
"zeroize",
@@ -1323,9 +1328,9 @@ dependencies = [
[[package]]
name = "aws-lc-sys"
-version = "0.35.0"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b45afffdee1e7c9126814751f88dddc747f41d91da16c9551a0f1e8a11e788a1"
+checksum = "1fa7e52a4c5c547c741610a2c6f123f3881e409b714cd27e6798ef020c514f0a"
dependencies = [
"cc",
"cmake",
@@ -1335,9 +1340,9 @@ dependencies = [
[[package]]
name = "aws-runtime"
-version = "1.5.17"
+version = "1.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d81b5b2898f6798ad58f484856768bca817e3cd9de0974c24ae0f1113fe88f1b"
+checksum = "5fc0651c57e384202e47153c1260b84a9936e19803d747615edf199dc3b98d17"
dependencies = [
"aws-credential-types",
"aws-sigv4",
@@ -1349,9 +1354,12 @@ dependencies = [
"aws-smithy-types",
"aws-types",
"bytes",
+ "bytes-utils",
"fastrand",
"http 0.2.12",
+ "http 1.4.0",
"http-body 0.4.6",
+ "http-body 1.0.1",
"percent-encoding",
"pin-project-lite",
"tracing",
@@ -1360,15 +1368,16 @@ dependencies = [
[[package]]
name = "aws-sdk-kms"
-version = "1.97.0"
+version = "1.104.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b35a6be02a6fd3618c701a49a4dac4282658d18ccfcdcc8ac3b6c2fb4317e4fa"
+checksum = "c41ae6a33da941457e89075ef8ca5b4870c8009fe4dceeba82fce2f30f313ac6"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
"aws-smithy-json",
+ "aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -1376,15 +1385,16 @@ dependencies = [
"bytes",
"fastrand",
"http 0.2.12",
+ "http 1.4.0",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sdk-s3"
-version = "1.119.0"
+version = "1.127.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d65fddc3844f902dfe1864acb8494db5f9342015ee3ab7890270d36fbd2e01c"
+checksum = "151783f64e0dcddeb4965d08e36c276b4400a46caa88805a2e36d497deaf031a"
dependencies = [
"aws-credential-types",
"aws-runtime",
@@ -1394,6 +1404,7 @@ dependencies = [
"aws-smithy-eventstream",
"aws-smithy-http",
"aws-smithy-json",
+ "aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -1405,8 +1416,8 @@ dependencies = [
"hmac",
"http 0.2.12",
"http 1.4.0",
- "http-body 0.4.6",
- "lru 0.12.5",
+ "http-body 1.0.1",
+ "lru",
"percent-encoding",
"regex-lite",
"sha2",
@@ -1416,15 +1427,16 @@ dependencies = [
[[package]]
name = "aws-sdk-sso"
-version = "1.91.0"
+version = "1.97.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ee6402a36f27b52fe67661c6732d684b2635152b676aa2babbfb5204f99115d"
+checksum = "9aadc669e184501caaa6beafb28c6267fc1baef0810fb58f9b205485ca3f2567"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
"aws-smithy-json",
+ "aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -1432,21 +1444,23 @@ dependencies = [
"bytes",
"fastrand",
"http 0.2.12",
+ "http 1.4.0",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sdk-ssooidc"
-version = "1.93.0"
+version = "1.99.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a45a7f750bbd170ee3677671ad782d90b894548f4e4ae168302c57ec9de5cb3e"
+checksum = "1342a7db8f358d3de0aed2007a0b54e875458e39848d54cc1d46700b2bfcb0a8"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
"aws-smithy-json",
+ "aws-smithy-observability",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -1454,21 +1468,23 @@ dependencies = [
"bytes",
"fastrand",
"http 0.2.12",
+ "http 1.4.0",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sdk-sts"
-version = "1.95.0"
+version = "1.101.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55542378e419558e6b1f398ca70adb0b2088077e79ad9f14eb09441f2f7b2164"
+checksum = "ab41ad64e4051ecabeea802d6a17845a91e83287e1dd249e6963ea1ba78c428a"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
"aws-smithy-json",
+ "aws-smithy-observability",
"aws-smithy-query",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
@@ -1477,15 +1493,16 @@ dependencies = [
"aws-types",
"fastrand",
"http 0.2.12",
+ "http 1.4.0",
"regex-lite",
"tracing",
]
[[package]]
name = "aws-sigv4"
-version = "1.3.7"
+version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69e523e1c4e8e7e8ff219d732988e22bfeae8a1cafdbe6d9eca1546fa080be7c"
+checksum = "b0b660013a6683ab23797778e21f1f854744fdf05f68204b4cca4c8c04b5d1f4"
dependencies = [
"aws-credential-types",
"aws-smithy-eventstream",
@@ -1506,9 +1523,9 @@ dependencies = [
[[package]]
name = "aws-smithy-async"
-version = "1.2.7"
+version = "1.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ee19095c7c4dda59f1697d028ce704c24b2d33c6718790c7f1d5a3015b4107c"
+checksum = "2ffcaf626bdda484571968400c326a244598634dc75fd451325a54ad1a59acfc"
dependencies = [
"futures-util",
"pin-project-lite",
@@ -1517,17 +1534,18 @@ dependencies = [
[[package]]
name = "aws-smithy-checksums"
-version = "0.63.12"
+version = "0.64.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87294a084b43d649d967efe58aa1f9e0adc260e13a6938eb904c0ae9b45824ae"
+checksum = "6750f3dd509b0694a4377f0293ed2f9630d710b1cebe281fa8bac8f099f88bc6"
dependencies = [
"aws-smithy-http",
"aws-smithy-types",
"bytes",
"crc-fast",
"hex",
- "http 0.2.12",
- "http-body 0.4.6",
+ "http 1.4.0",
+ "http-body 1.0.1",
+ "http-body-util",
"md-5",
"pin-project-lite",
"sha1",
@@ -1537,9 +1555,9 @@ dependencies = [
[[package]]
name = "aws-smithy-eventstream"
-version = "0.60.14"
+version = "0.60.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc12f8b310e38cad85cf3bef45ad236f470717393c613266ce0a89512286b650"
+checksum = "faf09d74e5e32f76b8762da505a3cd59303e367a664ca67295387baa8c1d7548"
dependencies = [
"aws-smithy-types",
"bytes",
@@ -1548,9 +1566,9 @@ dependencies = [
[[package]]
name = "aws-smithy-http"
-version = "0.62.6"
+version = "0.63.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "826141069295752372f8203c17f28e30c464d22899a43a0c9fd9c458d469c88b"
+checksum = "ba1ab2dc1c2c3749ead27180d333c42f11be8b0e934058fb4b2258ee8dbe5231"
dependencies = [
"aws-smithy-eventstream",
"aws-smithy-runtime-api",
@@ -1559,9 +1577,9 @@ dependencies = [
"bytes-utils",
"futures-core",
"futures-util",
- "http 0.2.12",
"http 1.4.0",
- "http-body 0.4.6",
+ "http-body 1.0.1",
+ "http-body-util",
"percent-encoding",
"pin-project-lite",
"pin-utils",
@@ -1570,57 +1588,51 @@ dependencies = [
[[package]]
name = "aws-smithy-http-client"
-version = "1.1.5"
+version = "1.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59e62db736db19c488966c8d787f52e6270be565727236fd5579eaa301e7bc4a"
+checksum = "6a2f165a7feee6f263028b899d0a181987f4fa7179a6411a32a439fba7c5f769"
dependencies = [
"aws-smithy-async",
"aws-smithy-runtime-api",
"aws-smithy-types",
- "h2 0.3.27",
"h2 0.4.13",
- "http 0.2.12",
"http 1.4.0",
- "http-body 0.4.6",
- "hyper 0.14.32",
"hyper 1.8.1",
- "hyper-rustls 0.24.2",
- "hyper-rustls 0.27.7",
+ "hyper-rustls",
"hyper-util",
"pin-project-lite",
- "rustls 0.21.12",
- "rustls 0.23.36",
+ "rustls",
"rustls-native-certs",
"rustls-pki-types",
"tokio",
- "tokio-rustls 0.26.4",
+ "tokio-rustls",
"tower 0.5.3",
"tracing",
]
[[package]]
name = "aws-smithy-json"
-version = "0.61.9"
+version = "0.62.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49fa1213db31ac95288d981476f78d05d9cbb0353d22cdf3472cc05bb02f6551"
+checksum = "9648b0bb82a2eedd844052c6ad2a1a822d1f8e3adee5fbf668366717e428856a"
dependencies = [
"aws-smithy-types",
]
[[package]]
name = "aws-smithy-observability"
-version = "0.1.5"
+version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17f616c3f2260612fe44cede278bafa18e73e6479c4e393e2c4518cf2a9a228a"
+checksum = "a06c2315d173edbf1920da8ba3a7189695827002e4c0fc961973ab1c54abca9c"
dependencies = [
"aws-smithy-runtime-api",
]
[[package]]
name = "aws-smithy-query"
-version = "0.60.9"
+version = "0.60.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae5d689cf437eae90460e944a58b5668530d433b4ff85789e69d2f2a556e057d"
+checksum = "1a56d79744fb3edb5d722ef79d86081e121d3b9422cb209eb03aea6aa4f21ebd"
dependencies = [
"aws-smithy-types",
"urlencoding",
@@ -1628,9 +1640,9 @@ dependencies = [
[[package]]
name = "aws-smithy-runtime"
-version = "1.9.5"
+version = "1.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a392db6c583ea4a912538afb86b7be7c5d8887d91604f50eb55c262ee1b4a5f5"
+checksum = "028999056d2d2fd58a697232f9eec4a643cf73a71cf327690a7edad1d2af2110"
dependencies = [
"aws-smithy-async",
"aws-smithy-http",
@@ -1644,6 +1656,7 @@ dependencies = [
"http 1.4.0",
"http-body 0.4.6",
"http-body 1.0.1",
+ "http-body-util",
"pin-project-lite",
"pin-utils",
"tokio",
@@ -1652,9 +1665,9 @@ dependencies = [
[[package]]
name = "aws-smithy-runtime-api"
-version = "1.9.3"
+version = "1.11.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab0d43d899f9e508300e587bf582ba54c27a452dd0a9ea294690669138ae14a2"
+checksum = "876ab3c9c29791ba4ba02b780a3049e21ec63dabda09268b175272c3733a79e6"
dependencies = [
"aws-smithy-async",
"aws-smithy-types",
@@ -1669,9 +1682,9 @@ dependencies = [
[[package]]
name = "aws-smithy-types"
-version = "1.3.5"
+version = "1.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "905cb13a9895626d49cf2ced759b062d913834c7482c38e49557eac4e6193f01"
+checksum = "9d73dbfbaa8e4bc57b9045137680b958d274823509a360abfd8e1d514d40c95c"
dependencies = [
"base64-simd",
"bytes",
@@ -1695,18 +1708,18 @@ dependencies = [
[[package]]
name = "aws-smithy-xml"
-version = "0.60.13"
+version = "0.60.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11b2f670422ff42bf7065031e72b45bc52a3508bd089f743ea90731ca2b6ea57"
+checksum = "0ce02add1aa3677d022f8adf81dcbe3046a95f17a1b1e8979c145cd21d3d22b3"
dependencies = [
"xmlparser",
]
[[package]]
name = "aws-types"
-version = "1.3.11"
+version = "1.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d980627d2dd7bfc32a3c025685a033eeab8d365cc840c631ef59d1b8f428164"
+checksum = "47c8323699dd9b3c8d5b3c13051ae9cdef58fd179957c882f8374dd8725962d9"
dependencies = [
"aws-credential-types",
"aws-smithy-async",
@@ -1850,6 +1863,7 @@ dependencies = [
name = "balance-overrides"
version = "0.1.0"
dependencies = [
+ "alloy-contract",
"alloy-eips",
"alloy-primitives",
"alloy-provider",
@@ -1860,9 +1874,12 @@ dependencies = [
"async-trait",
"cached",
"clap",
+ "configs",
"contracts",
"ethrpc",
"maplit",
+ "serde",
+ "serde_json",
"thiserror 1.0.69",
"tokio",
"tracing",
@@ -2370,9 +2387,19 @@ dependencies = [
name = "configs"
version = "0.1.0"
dependencies = [
+ "alloy",
+ "anyhow",
+ "bigdecimal",
+ "chrono",
+ "humantime-serde",
+ "rate-limit",
+ "s3",
"serde",
"serde_json",
+ "tempfile",
"thiserror 1.0.69",
+ "tokio",
+ "toml",
"tracing",
"url",
]
@@ -2463,23 +2490,82 @@ dependencies = [
name = "contracts"
version = "0.1.0"
dependencies = [
- "alloy-contract",
- "alloy-primitives",
- "alloy-provider",
- "alloy-sol-macro-expander",
- "alloy-sol-macro-input",
- "alloy-sol-types",
- "anyhow",
- "paste",
- "prettyplease",
- "proc-macro2",
- "quote",
- "reqwest 0.13.2",
- "serde",
- "serde_json",
- "syn 2.0.114",
- "tracing",
- "tracing-subscriber",
+ "cow-contract-anyoneauthenticator",
+ "cow-contract-balancerqueries",
+ "cow-contract-balancerv2authorizer",
+ "cow-contract-balancerv2basepool",
+ "cow-contract-balancerv2basepoolfactory",
+ "cow-contract-balancerv2composablestablepool",
+ "cow-contract-balancerv2composablestablepoolfactory",
+ "cow-contract-balancerv2composablestablepoolfactoryv3",
+ "cow-contract-balancerv2composablestablepoolfactoryv4",
+ "cow-contract-balancerv2composablestablepoolfactoryv5",
+ "cow-contract-balancerv2composablestablepoolfactoryv6",
+ "cow-contract-balancerv2liquiditybootstrappingpool",
+ "cow-contract-balancerv2liquiditybootstrappingpoolfactory",
+ "cow-contract-balancerv2noprotocolfeeliquiditybootstrappingpoolfactory",
+ "cow-contract-balancerv2stablepool",
+ "cow-contract-balancerv2stablepoolfactoryv2",
+ "cow-contract-balancerv2vault",
+ "cow-contract-balancerv2weightedpool",
+ "cow-contract-balancerv2weightedpool2tokensfactory",
+ "cow-contract-balancerv2weightedpoolfactory",
+ "cow-contract-balancerv2weightedpoolfactoryv3",
+ "cow-contract-balancerv2weightedpoolfactoryv4",
+ "cow-contract-balancerv3batchrouter",
+ "cow-contract-balances",
+ "cow-contract-baoswaprouter",
+ "cow-contract-chainalysisoracle",
+ "cow-contract-counter",
+ "cow-contract-cowamm",
+ "cow-contract-cowammconstantproductfactory",
+ "cow-contract-cowammfactorygetter",
+ "cow-contract-cowammlegacyhelper",
+ "cow-contract-cowammuniswapv2priceoracle",
+ "cow-contract-cowprotocoltoken",
+ "cow-contract-cowsettlementforwarder",
+ "cow-contract-cowswapethflow",
+ "cow-contract-cowswaponchainorders",
+ "cow-contract-erc1271signaturevalidator",
+ "cow-contract-erc20",
+ "cow-contract-erc20mintable",
+ "cow-contract-flashloanrouter",
+ "cow-contract-gashog",
+ "cow-contract-gnosissafe",
+ "cow-contract-gnosissafecompatibilityfallbackhandler",
+ "cow-contract-gnosissafeproxy",
+ "cow-contract-gnosissafeproxyfactory",
+ "cow-contract-gpv2allowlistauthentication",
+ "cow-contract-gpv2settlement",
+ "cow-contract-honeyswaprouter",
+ "cow-contract-hookstrampoline",
+ "cow-contract-icowwrapper",
+ "cow-contract-ierc4626",
+ "cow-contract-iswaprpair",
+ "cow-contract-iuniswaplikepair",
+ "cow-contract-iuniswaplikerouter",
+ "cow-contract-iuniswapv3factory",
+ "cow-contract-izeroex",
+ "cow-contract-liquoricesettlement",
+ "cow-contract-mockerc4626wrapper",
+ "cow-contract-nonstandarderc20balances",
+ "cow-contract-pancakerouter",
+ "cow-contract-permit2",
+ "cow-contract-remoteerc20balances",
+ "cow-contract-signatures",
+ "cow-contract-solver",
+ "cow-contract-spardose",
+ "cow-contract-sushiswaprouter",
+ "cow-contract-swapper",
+ "cow-contract-swaprrouter",
+ "cow-contract-testnetuniswapv2router02",
+ "cow-contract-trader",
+ "cow-contract-uniswapv2factory",
+ "cow-contract-uniswapv2router02",
+ "cow-contract-uniswapv3pool",
+ "cow-contract-uniswapv3quoterv2",
+ "cow-contract-uniswapv3swaprouterv2",
+ "cow-contract-weth9",
]
[[package]]
@@ -2540,47 +2626,883 @@ dependencies = [
]
[[package]]
-name = "core-foundation"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
+name = "core-foundation"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
+[[package]]
+name = "cow-amm"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-rpc-types",
+ "alloy-sol-types",
+ "anyhow",
+ "app-data",
+ "async-trait",
+ "const-hex",
+ "contracts",
+ "database",
+ "ethrpc",
+ "event-indexing",
+ "futures",
+ "model",
+ "observe",
+ "prometheus",
+ "prometheus-metric-storage",
+ "signature-validator",
+ "sqlx",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "cow-contract-anyoneauthenticator"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerqueries"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2authorizer"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2basepool"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2basepoolfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2composablestablepool"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2composablestablepoolfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2composablestablepoolfactoryv3"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2composablestablepoolfactoryv4"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2composablestablepoolfactoryv5"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2composablestablepoolfactoryv6"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2liquiditybootstrappingpool"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2liquiditybootstrappingpoolfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2noprotocolfeeliquiditybootstrappingpoolfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2stablepool"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2stablepoolfactoryv2"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2vault"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2weightedpool"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2weightedpool2tokensfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2weightedpoolfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2weightedpoolfactoryv3"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2weightedpoolfactoryv4"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv3batchrouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balances"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-baoswaprouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-chainalysisoracle"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-counter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowamm"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowammconstantproductfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowammfactorygetter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowammlegacyhelper"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowammuniswapv2priceoracle"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowprotocoltoken"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowsettlementforwarder"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowswapethflow"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowswaponchainorders"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-erc1271signaturevalidator"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-erc20"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-erc20mintable"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-flashloanrouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gashog"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gnosissafe"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gnosissafecompatibilityfallbackhandler"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gnosissafeproxy"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gnosissafeproxyfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gpv2allowlistauthentication"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gpv2settlement"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-honeyswaprouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-hookstrampoline"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-icowwrapper"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-ierc4626"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-iswaprpair"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-iuniswaplikepair"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-iuniswaplikerouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-iuniswapv3factory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-izeroex"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-liquoricesettlement"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-mockerc4626wrapper"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-nonstandarderc20balances"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-pancakerouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-permit2"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-remoteerc20balances"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-signatures"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-solver"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-spardose"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-sushiswaprouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-swapper"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-swaprrouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-testnetuniswapv2router02"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-trader"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-uniswapv2factory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-uniswapv2router02"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-uniswapv3pool"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-uniswapv3quoterv2"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-uniswapv3swaprouterv2"
+version = "0.1.0"
dependencies = [
- "core-foundation-sys",
- "libc",
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
]
[[package]]
-name = "core-foundation-sys"
-version = "0.8.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
-
-[[package]]
-name = "cow-amm"
+name = "cow-contract-weth9"
version = "0.1.0"
dependencies = [
"alloy-contract",
"alloy-primitives",
"alloy-provider",
- "alloy-rpc-types",
"alloy-sol-types",
"anyhow",
- "app-data",
- "async-trait",
- "const-hex",
- "contracts",
- "database",
- "ethrpc",
- "event-indexing",
- "futures",
- "model",
- "observe",
- "prometheus",
- "prometheus-metric-storage",
- "signature-validator",
- "sqlx",
- "tokio",
- "tracing",
]
[[package]]
@@ -2594,9 +3516,9 @@ dependencies = [
[[package]]
name = "crc"
-version = "3.4.0"
+version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d"
+checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675"
dependencies = [
"crc-catalog",
]
@@ -2609,15 +3531,14 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
[[package]]
name = "crc-fast"
-version = "1.6.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ddc2d09feefeee8bd78101665bd8645637828fa9317f9f292496dbbd8c65ff3"
+checksum = "2fd92aca2c6001b1bf5ba0ff84ee74ec8501b52bbef0cac80bf25a6c1d87a83d"
dependencies = [
"crc",
"digest 0.10.7",
- "rand 0.9.2",
- "regex",
"rustversion",
+ "spin 0.10.0",
]
[[package]]
@@ -2710,6 +3631,16 @@ dependencies = [
"darling_macro 0.21.3",
]
+[[package]]
+name = "darling"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d"
+dependencies = [
+ "darling_core 0.23.0",
+ "darling_macro 0.23.0",
+]
+
[[package]]
name = "darling_core"
version = "0.14.4"
@@ -2731,6 +3662,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
dependencies = [
"fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.11.1",
+ "syn 2.0.114",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0"
+dependencies = [
"ident_case",
"proc-macro2",
"quote",
@@ -2761,6 +3705,17 @@ dependencies = [
"syn 2.0.114",
]
+[[package]]
+name = "darling_macro"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
+dependencies = [
+ "darling_core 0.23.0",
+ "quote",
+ "syn 2.0.114",
+]
+
[[package]]
name = "dashmap"
version = "6.1.0"
@@ -2798,7 +3753,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ab67060fc6b8ef687992d439ca0fa36e7ed17e9a0b16b25b601e8757df720de"
dependencies = [
"data-encoding",
- "syn 2.0.114",
+ "syn 1.0.109",
]
[[package]]
@@ -2965,16 +3920,19 @@ dependencies = [
"chain",
"chrono",
"clap",
+ "configs",
"const-hex",
"contracts",
"cow-amm",
"dashmap",
"derive_more 1.0.0",
+ "eth-domain-types",
"ethrpc",
"event-indexing",
"futures",
"gas-price-estimation",
"hex-literal",
+ "http-client",
"humantime",
"humantime-serde",
"itertools 0.14.0",
@@ -2989,7 +3947,7 @@ dependencies = [
"price-estimation",
"prometheus",
"prometheus-metric-storage",
- "rand 0.8.5",
+ "rand 0.9.4",
"request-sharing",
"reqwest 0.13.2",
"s3",
@@ -2999,6 +3957,7 @@ dependencies = [
"serde_with",
"shared",
"signature-validator",
+ "simulator",
"solver",
"solvers-dto",
"tempfile",
@@ -3046,6 +4005,7 @@ dependencies = [
"cow-amm",
"database",
"driver",
+ "eth-domain-types",
"ethrpc",
"futures",
"hex-literal",
@@ -3059,14 +4019,17 @@ dependencies = [
"refunder",
"reqwest 0.13.2",
"rstest",
+ "serde",
"serde_json",
"shared",
"signature-validator",
+ "simulator",
"solver",
"solvers",
"solvers-dto",
"sqlx",
"tempfile",
+ "testlib",
"tokio",
"toml",
"tracing",
@@ -3171,7 +4134,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -3185,6 +4148,18 @@ dependencies = [
"windows-sys 0.48.0",
]
+[[package]]
+name = "eth-domain-types"
+version = "0.1.0"
+dependencies = [
+ "alloy-eips",
+ "alloy-primitives",
+ "alloy-rpc-types",
+ "derive_more 1.0.0",
+ "num",
+ "number",
+]
+
[[package]]
name = "ethrpc"
version = "0.1.0"
@@ -3209,7 +4184,7 @@ dependencies = [
"observe",
"prometheus",
"prometheus-metric-storage",
- "rand 0.8.5",
+ "rand 0.9.4",
"reqwest 0.13.2",
"scopeguard",
"serde",
@@ -3340,7 +4315,7 @@ checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095"
dependencies = [
"futures-core",
"futures-sink",
- "spin",
+ "spin 0.9.8",
]
[[package]]
@@ -3523,6 +4498,7 @@ dependencies = [
"alloy-provider",
"anyhow",
"async-trait",
+ "configs",
"ethrpc",
"futures",
"mockall",
@@ -3824,6 +4800,16 @@ dependencies = [
"pin-project-lite",
]
+[[package]]
+name = "http-client"
+version = "0.1.0"
+dependencies = [
+ "clap",
+ "configs",
+ "humantime",
+ "reqwest 0.13.2",
+]
+
[[package]]
name = "httparse"
version = "1.10.1"
@@ -3899,21 +4885,6 @@ dependencies = [
"want",
]
-[[package]]
-name = "hyper-rustls"
-version = "0.24.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
-dependencies = [
- "futures-util",
- "http 0.2.12",
- "hyper 0.14.32",
- "log",
- "rustls 0.21.12",
- "tokio",
- "tokio-rustls 0.24.1",
-]
-
[[package]]
name = "hyper-rustls"
version = "0.27.7"
@@ -3923,11 +4894,11 @@ dependencies = [
"http 1.4.0",
"hyper 1.8.1",
"hyper-util",
- "rustls 0.23.36",
+ "rustls",
"rustls-native-certs",
"rustls-pki-types",
"tokio",
- "tokio-rustls 0.26.4",
+ "tokio-rustls",
"tower-service",
]
@@ -3956,22 +4927,6 @@ dependencies = [
"tower-service",
]
-[[package]]
-name = "hyper-tls"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
-dependencies = [
- "bytes",
- "http-body-util",
- "hyper 1.8.1",
- "hyper-util",
- "native-tls",
- "tokio",
- "tokio-native-tls",
- "tower-service",
-]
-
[[package]]
name = "hyper-util"
version = "0.1.19"
@@ -4328,9 +5283,9 @@ dependencies = [
[[package]]
name = "keccak"
-version = "0.1.5"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654"
+checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653"
dependencies = [
"cpufeatures",
]
@@ -4351,7 +5306,7 @@ version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
dependencies = [
- "spin",
+ "spin 0.9.8",
]
[[package]]
@@ -4477,15 +5432,6 @@ version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
-[[package]]
-name = "lru"
-version = "0.12.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
-dependencies = [
- "hashbrown 0.15.5",
-]
-
[[package]]
name = "lru"
version = "0.16.3"
@@ -4668,6 +5614,7 @@ dependencies = [
"num",
"number",
"serde",
+ "serde-ext",
"serde_json",
"serde_with",
"strum",
@@ -4739,7 +5686,7 @@ version = "0.50.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
dependencies = [
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -5074,7 +6021,7 @@ dependencies = [
"futures-util",
"opentelemetry",
"percent-encoding",
- "rand 0.9.2",
+ "rand 0.9.4",
"thiserror 2.0.17",
]
@@ -5102,6 +6049,7 @@ dependencies = [
"async-trait",
"axum 0.8.8",
"bad-tokens",
+ "balance-overrides",
"bigdecimal",
"cached",
"chain",
@@ -5111,10 +6059,12 @@ dependencies = [
"const-hex",
"contracts",
"database",
+ "eth-domain-types",
"ethrpc",
"futures",
"gas-price-estimation",
"hex-literal",
+ "http-client",
"humantime",
"humantime-serde",
"mimalloc",
@@ -5134,6 +6084,7 @@ dependencies = [
"serde_with",
"shared",
"signature-validator",
+ "simulator",
"sqlx",
"strum",
"tempfile",
@@ -5419,13 +6370,16 @@ dependencies = [
"chain",
"chrono",
"clap",
+ "configs",
"const-hex",
"contracts",
+ "dashmap",
"derive_more 1.0.0",
"ethrpc",
"futures",
"gas-price-estimation",
"hex-literal",
+ "http-client",
"humantime",
"humantime-serde",
"itertools 0.14.0",
@@ -5438,7 +6392,7 @@ dependencies = [
"observe",
"prometheus",
"prometheus-metric-storage",
- "rand 0.8.5",
+ "rand 0.9.4",
"rate-limit",
"request-sharing",
"reqwest 0.13.2",
@@ -5446,6 +6400,7 @@ dependencies = [
"serde",
"serde_json",
"serde_with",
+ "simulator",
"testlib",
"thiserror 1.0.69",
"token-info",
@@ -5552,7 +6507,7 @@ dependencies = [
"bit-vec",
"bitflags 2.10.0",
"num-traits",
- "rand 0.9.2",
+ "rand 0.9.4",
"rand_chacha 0.9.0",
"rand_xorshift",
"regex-syntax",
@@ -5693,7 +6648,7 @@ dependencies = [
"quinn-proto",
"quinn-udp",
"rustc-hash",
- "rustls 0.23.36",
+ "rustls",
"socket2 0.6.1",
"thiserror 2.0.17",
"tokio",
@@ -5703,18 +6658,18 @@ dependencies = [
[[package]]
name = "quinn-proto"
-version = "0.11.13"
+version = "0.11.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
+checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098"
dependencies = [
"aws-lc-rs",
"bytes",
"getrandom 0.3.4",
"lru-slab",
- "rand 0.9.2",
+ "rand 0.9.4",
"ring",
"rustc-hash",
- "rustls 0.23.36",
+ "rustls",
"rustls-pki-types",
"slab",
"thiserror 2.0.17",
@@ -5778,9 +6733,9 @@ dependencies = [
[[package]]
name = "rand"
-version = "0.9.2"
+version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
+checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
dependencies = [
"rand_chacha 0.9.0",
"rand_core 0.9.5",
@@ -5841,7 +6796,7 @@ version = "4.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d8b5b858a440a0bc02625b62dd95131b9201aa9f69f411195dd4a7cfb1de3d7"
dependencies = [
- "rand 0.9.2",
+ "rand 0.9.4",
"rustversion",
]
@@ -5850,12 +6805,15 @@ name = "rate-limit"
version = "0.1.0"
dependencies = [
"anyhow",
+ "configs",
"futures",
- "humantime",
+ "humantime-serde",
"observe",
"prometheus",
"prometheus-metric-storage",
"reqwest 0.13.2",
+ "serde",
+ "serde_json",
"thiserror 1.0.69",
"tokio",
"tracing",
@@ -5913,6 +6871,7 @@ dependencies = [
"ethrpc",
"futures",
"gas-price-estimation",
+ "http-client",
"humantime",
"mimalloc",
"mockall",
@@ -5920,7 +6879,7 @@ dependencies = [
"observe",
"prometheus",
"prometheus-metric-storage",
- "rand 0.8.5",
+ "rand 0.9.4",
"rstest",
"shared",
"sqlx",
@@ -5997,20 +6956,16 @@ dependencies = [
"http-body 1.0.1",
"http-body-util",
"hyper 1.8.1",
- "hyper-tls",
"hyper-util",
"js-sys",
"log",
- "native-tls",
"percent-encoding",
"pin-project-lite",
- "rustls-pki-types",
"serde",
"serde_json",
"serde_urlencoded",
"sync_wrapper 1.0.2",
"tokio",
- "tokio-native-tls",
"tower 0.5.3",
"tower-http",
"tower-service",
@@ -6039,7 +6994,7 @@ dependencies = [
"http-body 1.0.1",
"http-body-util",
"hyper 1.8.1",
- "hyper-rustls 0.27.7",
+ "hyper-rustls",
"hyper-util",
"js-sys",
"log",
@@ -6047,7 +7002,7 @@ dependencies = [
"percent-encoding",
"pin-project-lite",
"quinn",
- "rustls 0.23.36",
+ "rustls",
"rustls-pki-types",
"rustls-platform-verifier",
"serde",
@@ -6055,7 +7010,7 @@ dependencies = [
"serde_urlencoded",
"sync_wrapper 1.0.2",
"tokio",
- "tokio-rustls 0.26.4",
+ "tokio-rustls",
"tokio-util",
"tower 0.5.3",
"tower-http",
@@ -6179,7 +7134,7 @@ dependencies = [
"primitive-types",
"proptest",
"rand 0.8.5",
- "rand 0.9.2",
+ "rand 0.9.4",
"rlp",
"ruint-macro",
"serde_core",
@@ -6252,19 +7207,7 @@ dependencies = [
"errno",
"libc",
"linux-raw-sys",
- "windows-sys 0.61.2",
-]
-
-[[package]]
-name = "rustls"
-version = "0.21.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e"
-dependencies = [
- "log",
- "ring",
- "rustls-webpki 0.101.7",
- "sct",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -6276,7 +7219,7 @@ dependencies = [
"aws-lc-rs",
"once_cell",
"rustls-pki-types",
- "rustls-webpki 0.103.8",
+ "rustls-webpki",
"subtle",
"zeroize",
]
@@ -6314,14 +7257,14 @@ dependencies = [
"jni",
"log",
"once_cell",
- "rustls 0.23.36",
+ "rustls",
"rustls-native-certs",
"rustls-platform-verifier-android",
- "rustls-webpki 0.103.8",
+ "rustls-webpki",
"security-framework 3.5.1",
"security-framework-sys",
"webpki-root-certs",
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -6332,19 +7275,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
[[package]]
name = "rustls-webpki"
-version = "0.101.7"
+version = "0.103.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
-dependencies = [
- "ring",
- "untrusted",
-]
-
-[[package]]
-name = "rustls-webpki"
-version = "0.103.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52"
+checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
dependencies = [
"aws-lc-rs",
"ring",
@@ -6438,16 +7371,6 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
-[[package]]
-name = "sct"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
-dependencies = [
- "ring",
- "untrusted",
-]
-
[[package]]
name = "sec1"
version = "0.7.3"
@@ -6746,6 +7669,7 @@ dependencies = [
"chain",
"chrono",
"clap",
+ "configs",
"const-hex",
"contracts",
"dashmap",
@@ -6770,7 +7694,7 @@ dependencies = [
"price-estimation",
"prometheus",
"prometheus-metric-storage",
- "rand 0.8.5",
+ "rand 0.9.4",
"rate-limit",
"regex",
"request-sharing",
@@ -6846,6 +7770,51 @@ version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2"
+[[package]]
+name = "simulator"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-eips",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-rpc-types",
+ "alloy-sol-types",
+ "alloy-transport",
+ "anyhow",
+ "app-data",
+ "async-trait",
+ "balance-overrides",
+ "cached",
+ "chain",
+ "configs",
+ "const-hex",
+ "contracts",
+ "derive_more 1.0.0",
+ "eth-domain-types",
+ "ethrpc",
+ "futures",
+ "gas-price-estimation",
+ "hex-literal",
+ "http-client",
+ "mockall",
+ "model",
+ "number",
+ "observe",
+ "prometheus",
+ "prometheus-metric-storage",
+ "reqwest 0.13.2",
+ "serde",
+ "serde-ext",
+ "serde_json",
+ "serde_with",
+ "testlib",
+ "thiserror 1.0.69",
+ "tokio",
+ "tracing",
+ "url",
+]
+
[[package]]
name = "slab"
version = "0.4.11"
@@ -6906,6 +7875,7 @@ dependencies = [
"prometheus-metric-storage",
"serde_json",
"shared",
+ "simulator",
"strum",
"testlib",
"tokio",
@@ -6919,34 +7889,45 @@ dependencies = [
"alloy",
"anyhow",
"axum 0.8.8",
+ "base64 0.22.1",
"bigdecimal",
+ "bytes-hex",
"chain",
"chrono",
"clap",
+ "configs",
"const-hex",
"contracts",
"derive_more 1.0.0",
"ethrpc",
"futures",
+ "glob",
+ "hmac",
+ "humantime-serde",
"itertools 0.14.0",
"liquidity-sources",
"maplit",
"mimalloc",
"model",
+ "moka",
"num",
"number",
"observe",
"price-estimation",
"prometheus",
"prometheus-metric-storage",
+ "rate-limit",
"reqwest 0.13.2",
"serde",
"serde_json",
"serde_with",
+ "sha2",
"shared",
"solver",
"solvers-dto",
"tempfile",
+ "testlib",
+ "thiserror 1.0.69",
"tikv-jemallocator",
"tokio",
"toml",
@@ -6972,6 +7953,7 @@ dependencies = [
"number",
"serde",
"serde-ext",
+ "serde_json",
"serde_with",
]
@@ -6984,6 +7966,12 @@ dependencies = [
"lock_api",
]
+[[package]]
+name = "spin"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591"
+
[[package]]
name = "spki"
version = "0.7.3"
@@ -7356,7 +8344,7 @@ dependencies = [
"getrandom 0.3.4",
"once_cell",
"rustix",
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -7577,33 +8565,13 @@ dependencies = [
"syn 2.0.114",
]
-[[package]]
-name = "tokio-native-tls"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
-dependencies = [
- "native-tls",
- "tokio",
-]
-
-[[package]]
-name = "tokio-rustls"
-version = "0.24.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
-dependencies = [
- "rustls 0.21.12",
- "tokio",
-]
-
[[package]]
name = "tokio-rustls"
version = "0.26.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
dependencies = [
- "rustls 0.23.36",
+ "rustls",
"tokio",
]
@@ -7621,16 +8589,16 @@ dependencies = [
[[package]]
name = "tokio-tungstenite"
-version = "0.26.2"
+version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084"
+checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857"
dependencies = [
"futures-util",
"log",
- "rustls 0.23.36",
+ "rustls",
"rustls-pki-types",
"tokio",
- "tokio-rustls 0.26.4",
+ "tokio-rustls",
"tungstenite",
"webpki-roots 0.26.11",
]
@@ -7958,17 +8926,17 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "tungstenite"
-version = "0.26.2"
+version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13"
+checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442"
dependencies = [
"bytes",
"data-encoding",
"http 1.4.0",
"httparse",
"log",
- "rand 0.9.2",
- "rustls 0.23.36",
+ "rand 0.9.4",
+ "rustls",
"rustls-pki-types",
"sha1",
"thiserror 2.0.17",
@@ -8375,7 +9343,7 @@ version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
dependencies = [
- "windows-sys 0.61.2",
+ "windows-sys 0.48.0",
]
[[package]]
diff --git a/Cargo.toml b/Cargo.toml
index 485b842094..7ad6cdcfab 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,30 +1,29 @@
[workspace]
resolver = "3"
members = ["crates/*"]
+exclude = ["contracts/"]
[workspace.dependencies]
account-balances = { path = "crates/account-balances" }
-alloy = { version = "1.7.3", default-features = false }
-alloy-consensus = { version = "1.7.3", default-features = false }
-alloy-contract = { version = "1.7.3", default-features = false }
+alloy = { version = "1.8.3", default-features = false }
+alloy-consensus = { version = "1.8.3", default-features = false }
+alloy-contract = { version = "1.8.3", default-features = false }
alloy-dyn-abi = { version = "1.5.7", default-features = false }
-alloy-eips = { version = "1.7.3", default-features = false }
+alloy-eips = { version = "1.8.3", default-features = false }
alloy-json-abi = { version = "1.5.7", default-features = false }
-alloy-json-rpc = { version = "1.7.3", default-features = false }
-alloy-network = { version = "1.7.3", default-features = false }
-alloy-primitives = { version = "1.5.2", default-features = false }
-alloy-provider = { version = "1.7.3", default-features = false }
-alloy-rpc-client = { version = "1.7.3", default-features = false }
-alloy-rpc-types = { version = "1.7.3", default-features = false }
-alloy-rpc-types-eth = { version = "1.7.3", default-features = false }
-alloy-rpc-types-trace = { version = "1.7.3", default-features = false }
-alloy-signer = { version = "1.7.3", default-features = false }
-alloy-signer-local = { version = "1.7.3", default-features = false }
-alloy-sol-macro-expander = "1.4.1"
-alloy-sol-macro-input = "1.4.1"
-alloy-sol-types = { version = "1.5.2" }
-alloy-transport = { version = "1.7.3", default-features = false }
-alloy-transport-ws = { version = "1.7.3", default-features = false }
+alloy-json-rpc = { version = "1.8.3", default-features = false }
+alloy-network = { version = "1.8.3", default-features = false }
+alloy-primitives = { version = "1.5.7", default-features = false }
+alloy-provider = { version = "1.8.3", default-features = false }
+alloy-rpc-client = { version = "1.8.3", default-features = false }
+alloy-rpc-types = { version = "1.8.3", default-features = false }
+alloy-rpc-types-eth = { version = "1.8.3", default-features = false }
+alloy-rpc-types-trace = { version = "1.8.3", default-features = false }
+alloy-signer = { version = "1.8.3", default-features = false }
+alloy-signer-local = { version = "1.8.3", default-features = false }
+alloy-sol-types = { version = "1.5.7" }
+alloy-transport = { version = "1.8.3", default-features = false }
+alloy-transport-ws = { version = "1.8.3", default-features = false }
anyhow = "1.0.100"
app-data = { path = "crates/app-data" }
arc-swap = "1.7.1"
@@ -36,6 +35,7 @@ aws-sdk-s3 = { version = "1.34.0", default-features = false }
axum = "0.8"
bad-tokens = { path = "crates/bad-tokens" }
balance-overrides = { path = "crates/balance-overrides" }
+base64 = "0.22.1"
bigdecimal = "0.4"
brotli = "8"
bytes = "1.11.1"
@@ -48,20 +48,24 @@ configs = { path = "crates/configs/" }
console-subscriber = "0.3.0"
const_format = "0.2.32"
const-hex = "1.17.0"
-contracts = { path = "crates/contracts" }
+contracts = { path = "contracts/generated/contracts-facade" }
cow-amm = { path = "crates/cow-amm" }
dashmap = "6.1.0"
database = { path = "crates/database" }
derive_more = { version = "1.0.0", features = ["full"] }
driver = { path = "crates/driver" }
+eth-domain-types = { path = "crates/eth-domain-types" }
ethrpc = { path = "crates/ethrpc" }
event-indexing = { path = "crates/event-indexing" }
flate2 = "1.0.30"
futures = "0.3.30"
gas-price-estimation = { path = "crates/gas-price-estimation" }
+hex = "0.4.3"
hex-literal = "0.4.1"
+hmac = "0.12.1"
http-body = "1"
http-body-util = "0.1"
+http-client = { path = "crates/http-client" }
humantime = "2.1.0"
humantime-serde = "1.1.1"
indexmap = "2.2.6"
@@ -92,7 +96,7 @@ proc-macro2 = "1.0.103"
prometheus = "0.14"
prometheus-metric-storage = "0.6"
quote = "1.0.41"
-rand = "0.8.5"
+rand = "0.9.4"
rate-limit = { path = "crates/rate-limit" }
refunder = { path = "crates/refunder" }
regex = "1.10.4"
@@ -107,8 +111,10 @@ serde = { version = "1.0.203", features = ["derive"] }
serde-ext = { path = "crates/serde-ext" }
serde_json = "1.0.117"
serde_with = "3.8.1"
+sha2 = "0.10"
shared = { path = "crates/shared" }
signature-validator = { path = "crates/signature-validator" }
+simulator = { path = "crates/simulator" }
solver = { path = "crates/solver" }
solvers = { path = "crates/solvers" }
solvers-dto = { path = "crates/solvers-dto" }
diff --git a/Justfile b/Justfile
index 6bf98a1e48..d3fcff2b11 100644
--- a/Justfile
+++ b/Justfile
@@ -1,6 +1,25 @@
help:
@just --list
+# Bootstrap the crate, will vendor contracts, generate the bindings crates and format everything
+setup:
+ cd contracts && \
+ cargo r -r -- vendor && \
+ cargo r -r -- generate
+ just _format_generated_contracts
+
+# Generate contract bindings
+generate-contracts:
+ cd contracts && \
+ cargo r -r -- generate
+ just _format_generated_contracts
+
+_format_generated_contracts:
+ cd contracts && cargo +nightly fmt --all && \
+ cd generated && cargo +nightly fmt --all && \
+ cd ../.. && \
+ tombi format
+
# Run unit tests
test-unit:
cargo nextest run
@@ -35,6 +54,12 @@ clippy:
# Format the repository
fmt *extra:
cargo +nightly fmt --all -- {{extra}}
+ cd contracts && cargo +nightly fmt --all -- {{extra}}
+
+# Format .toml files in the repository
+fmt-toml *extra:
+ tombi format {{extra}}
+
# Format .toml files in the repository
fmt-toml *extra:
diff --git a/LICENSE-APACHE b/LICENSE-APACHE
old mode 100644
new mode 100755
diff --git a/LICENSE-GPL b/LICENSE-GPL
old mode 100644
new mode 100755
diff --git a/LICENSE-MIT b/LICENSE-MIT
old mode 100644
new mode 100755
diff --git a/README.md b/README.md
index 84316c85fd..bcc18a0841 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,8 @@
This repository contains backend code for [Cow Protocol Services](https://docs.cow.fi/) written in Rust.
+New to the repo? Start with the architecture + flow diagrams in [`docs/ONBOARDING.md`](./docs/ONBOARDING.md), then run the stack locally via the [`playground`](./playground/README.md).
+
## Order Book
The `orderbook` crate provides the http api through which users (usually through a frontend web application) interact with the order book.
diff --git a/REVIEW.md b/REVIEW.md
new file mode 100644
index 0000000000..a4105d181e
--- /dev/null
+++ b/REVIEW.md
@@ -0,0 +1,78 @@
+# Code Review Guidelines
+
+These instructions guide automated code reviews. Focus on real bugs and
+correctness issues. Do not pad reviews with praise or filler.
+
+## Priorities
+
+Review in priority order.
+
+1. **Correctness** — logic errors, wrong return values, off-by-one, missing
+ error propagation, incorrect arithmetic (especially with U256/BigDecimal)
+2. **Safety** — panics in production paths (`unwrap` on fallible operations),
+ unchecked arithmetic overflow, missing bounds checks
+3. **Security** — SQL injection, command injection, secrets in logs,
+ unvalidated external input at system boundaries
+4. **Concurrency** — data races, deadlocks, incorrect `Send`/`Sync` bounds,
+ holding locks across await points
+5. **Backwards compatibility** — API breaking changes, database migration
+ issues, settlement contract interaction changes
+
+## Always check
+
+- Token amount conversions between decimal and wei are correct (scaling
+ direction, precision loss)
+- Error types from external APIs (solvers, DEX aggregators) are mapped to the
+ correct internal variant — wrong mapping produces noisy logs or silently
+ drops valid quotes
+- New `async` code does not block the Tokio runtime (no blocking I/O, no
+ `std::thread::sleep`, no heavy computation without `spawn_blocking`)
+- Database queries that touch large tables have been checked against existing
+ indexes. If a PR adds or modifies a query on a large table, request
+ `EXPLAIN ANALYZE` output (before and after) if not already included in the
+ PR description
+- Settlement-related changes are backward-compatible with in-flight auctions
+- Changes to auction or solver logic preserve existing solver competition
+ fairness
+
+## Do NOT flag
+
+- Style or formatting issues — `cargo fmt` and `clippy` handle these
+- Missing documentation or comments on clear code
+- Suggestions to add more tests unless a specific untested edge case is
+ identified
+- Pre-existing issues not introduced by the PR
+- Theoretical concerns that require specific unlikely conditions
+- `unwrap()` on values that are guaranteed by construction or prior checks
+- Differences in naming conventions that are consistent within the changed
+ file
+
+## Severity
+
+Use the code-review plugin's standard categories:
+
+- **Normal** — a bug or issue that should be fixed before merging
+- **Nit** — a minor improvement, not blocking
+
+Do not flag pre-existing issues not introduced by the PR. If unsure whether
+something is a real issue, ask a clarifying question rather than asserting a
+bug.
+
+## Skip these files
+
+- `Cargo.lock`
+- Generated contract bindings under `crates/contracts/`
+- Database migration files (review schema changes only, not the generated SQL)
+- Test fixture JSON files
+
+## Format
+
+For each finding, include:
+- File path and line number
+- What is wrong (one sentence)
+- Why it matters (one sentence)
+- For small, self-contained fixes, include a committable GitHub suggestion
+ block. For larger fixes, describe the recommended approach in prose.
+
+Do not summarize the PR. Do not list what looks correct. Only report findings.
+If you do not find issues, simply comment: LGTM
diff --git a/contracts/.gitignore b/contracts/.gitignore
new file mode 100644
index 0000000000..c0388e3cc4
--- /dev/null
+++ b/contracts/.gitignore
@@ -0,0 +1,4 @@
+/target
+/out
+/cache
+.DS_Store
diff --git a/contracts/Cargo.lock b/contracts/Cargo.lock
new file mode 100644
index 0000000000..26c94d60d8
--- /dev/null
+++ b/contracts/Cargo.lock
@@ -0,0 +1,2302 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "alloy-json-abi"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9dbe713da0c737d9e5e387b0ba790eb98b14dd207fe53eef50e19a5a8ec3dac"
+dependencies = [
+ "alloy-primitives",
+ "alloy-sol-type-parser",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "alloy-primitives"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3b431b4e72cd8bd0ec7a50b4be18e73dab74de0dba180eef171055e5d5926e"
+dependencies = [
+ "bytes",
+ "cfg-if",
+ "const-hex",
+ "derive_more",
+ "hashbrown",
+ "indexmap",
+ "itoa",
+ "paste",
+ "rand 0.9.2",
+ "ruint",
+ "rustc-hash",
+ "serde",
+ "sha3",
+]
+
+[[package]]
+name = "alloy-sol-macro-expander"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489f1620bb7e2483fb5819ed01ab6edc1d2f93939dce35a5695085a1afd1d699"
+dependencies = [
+ "alloy-sol-macro-input",
+ "const-hex",
+ "heck",
+ "indexmap",
+ "proc-macro-error2",
+ "proc-macro2",
+ "quote",
+ "sha3",
+ "syn",
+ "syn-solidity",
+]
+
+[[package]]
+name = "alloy-sol-macro-input"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56cef806ad22d4392c5fc83cf8f2089f988eb99c7067b4e0c6f1971fc1cca318"
+dependencies = [
+ "alloy-json-abi",
+ "const-hex",
+ "dunce",
+ "heck",
+ "macro-string",
+ "proc-macro2",
+ "quote",
+ "serde_json",
+ "syn",
+ "syn-solidity",
+]
+
+[[package]]
+name = "alloy-sol-type-parser"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6df77fea9d6a2a75c0ef8d2acbdfd92286cc599983d3175ccdc170d3433d249"
+dependencies = [
+ "serde",
+ "winnow",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.102"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "autocfg"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
+
+[[package]]
+name = "aws-lc-rs"
+version = "1.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc"
+dependencies = [
+ "aws-lc-sys",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-lc-sys"
+version = "0.39.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a25cf98105baa966497416dbd42565ce3a8cf8dbfd59803ec9ad46f3126399"
+dependencies = [
+ "cc",
+ "cmake",
+ "dunce",
+ "fs_extra",
+]
+
+[[package]]
+name = "base64"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+
+[[package]]
+name = "bitflags"
+version = "2.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
+
+[[package]]
+name = "bytes"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cc"
+version = "1.2.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283"
+dependencies = [
+ "find-msvc-tools",
+ "jobserver",
+ "libc",
+ "shlex",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
+
+[[package]]
+name = "cfg_aliases"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
+
+[[package]]
+name = "cmake"
+version = "0.1.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "combine"
+version = "4.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "const-hex"
+version = "1.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "531185e432bb31db1ecda541e9e7ab21468d4d844ad7505e0546a49b4945d49b"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "proptest",
+ "serde_core",
+]
+
+[[package]]
+name = "contracts-generate"
+version = "0.1.0"
+dependencies = [
+ "alloy-sol-macro-expander",
+ "alloy-sol-macro-input",
+ "anyhow",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "rayon",
+ "reqwest",
+ "serde_json",
+ "syn",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "derive_more"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134"
+dependencies = [
+ "derive_more-impl",
+]
+
+[[package]]
+name = "derive_more-impl"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn",
+ "unicode-xid",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
+
+[[package]]
+name = "either"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+
+[[package]]
+name = "find-msvc-tools"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foldhash"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs_extra"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
+
+[[package]]
+name = "futures-channel"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
+
+[[package]]
+name = "futures-io"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
+
+[[package]]
+name = "futures-task"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
+
+[[package]]
+name = "futures-util"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "r-efi",
+ "wasip2",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "h2"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54"
+dependencies = [
+ "atomic-waker",
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
+dependencies = [
+ "foldhash",
+ "serde",
+ "serde_core",
+]
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "http"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
+dependencies = [
+ "bytes",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
+dependencies = [
+ "bytes",
+ "http",
+]
+
+[[package]]
+name = "http-body-util"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "http",
+ "http-body",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
+
+[[package]]
+name = "hyper"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca"
+dependencies = [
+ "atomic-waker",
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "itoa",
+ "pin-project-lite",
+ "smallvec",
+ "tokio",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.27.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
+dependencies = [
+ "http",
+ "hyper",
+ "hyper-util",
+ "rustls",
+ "rustls-pki-types",
+ "tokio",
+ "tokio-rustls",
+ "tower-service",
+]
+
+[[package]]
+name = "hyper-util"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
+dependencies = [
+ "base64",
+ "bytes",
+ "futures-channel",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "ipnet",
+ "libc",
+ "percent-encoding",
+ "pin-project-lite",
+ "socket2",
+ "system-configuration",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "windows-registry",
+]
+
+[[package]]
+name = "icu_collections"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c"
+dependencies = [
+ "displaydoc",
+ "potential_utf",
+ "utf8_iter",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locale_core"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29"
+dependencies = [
+ "displaydoc",
+ "litemap",
+ "tinystr",
+ "writeable",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4"
+dependencies = [
+ "icu_collections",
+ "icu_normalizer_data",
+ "icu_properties",
+ "icu_provider",
+ "smallvec",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer_data"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38"
+
+[[package]]
+name = "icu_properties"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de"
+dependencies = [
+ "icu_collections",
+ "icu_locale_core",
+ "icu_properties_data",
+ "icu_provider",
+ "zerotrie",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_properties_data"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14"
+
+[[package]]
+name = "icu_provider"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421"
+dependencies = [
+ "displaydoc",
+ "icu_locale_core",
+ "writeable",
+ "yoke",
+ "zerofrom",
+ "zerotrie",
+ "zerovec",
+]
+
+[[package]]
+name = "idna"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
+dependencies = [
+ "idna_adapter",
+ "smallvec",
+ "utf8_iter",
+]
+
+[[package]]
+name = "idna_adapter"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
+dependencies = [
+ "icu_normalizer",
+ "icu_properties",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+ "serde",
+ "serde_core",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"
+
+[[package]]
+name = "iri-string"
+version = "0.7.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if",
+ "combine",
+ "jni-sys 0.3.1",
+ "log",
+ "thiserror 1.0.69",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258"
+dependencies = [
+ "jni-sys 0.4.1",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2"
+dependencies = [
+ "jni-sys-macros",
+]
+
+[[package]]
+name = "jni-sys-macros"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "jobserver"
+version = "0.1.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
+dependencies = [
+ "getrandom 0.3.4",
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "once_cell",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "keccak"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653"
+dependencies = [
+ "cpufeatures",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.184"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af"
+
+[[package]]
+name = "libm"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
+
+[[package]]
+name = "litemap"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
+
+[[package]]
+name = "log"
+version = "0.4.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+
+[[package]]
+name = "lru-slab"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
+
+[[package]]
+name = "macro-string"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "memchr"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mio"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+ "libm",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
+
+[[package]]
+name = "openssl-probe"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
+
+[[package]]
+name = "paste"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
+
+[[package]]
+name = "potential_utf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564"
+dependencies = [
+ "zerovec",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+dependencies = [
+ "zerocopy",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.2.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
+dependencies = [
+ "proc-macro2",
+ "syn",
+]
+
+[[package]]
+name = "proc-macro-error-attr2"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "proc-macro-error2"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802"
+dependencies = [
+ "proc-macro-error-attr2",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.106"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proptest"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744"
+dependencies = [
+ "bitflags",
+ "num-traits",
+ "rand 0.9.2",
+ "rand_chacha",
+ "rand_xorshift",
+ "unarray",
+]
+
+[[package]]
+name = "quinn"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
+dependencies = [
+ "bytes",
+ "cfg_aliases",
+ "pin-project-lite",
+ "quinn-proto",
+ "quinn-udp",
+ "rustc-hash",
+ "rustls",
+ "socket2",
+ "thiserror 2.0.18",
+ "tokio",
+ "tracing",
+ "web-time",
+]
+
+[[package]]
+name = "quinn-proto"
+version = "0.11.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098"
+dependencies = [
+ "aws-lc-rs",
+ "bytes",
+ "getrandom 0.3.4",
+ "lru-slab",
+ "rand 0.9.2",
+ "ring",
+ "rustc-hash",
+ "rustls",
+ "rustls-pki-types",
+ "slab",
+ "thiserror 2.0.18",
+ "tinyvec",
+ "tracing",
+ "web-time",
+]
+
+[[package]]
+name = "quinn-udp"
+version = "0.5.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd"
+dependencies = [
+ "cfg_aliases",
+ "libc",
+ "once_cell",
+ "socket2",
+ "tracing",
+ "windows-sys 0.60.2",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "r-efi"
+version = "5.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
+dependencies = [
+ "rand_chacha",
+ "rand_core 0.9.5",
+ "serde",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.9.5",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+
+[[package]]
+name = "rand_core"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
+dependencies = [
+ "getrandom 0.3.4",
+ "serde",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a"
+dependencies = [
+ "rand_core 0.9.5",
+]
+
+[[package]]
+name = "rayon"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-rustls",
+ "hyper-util",
+ "js-sys",
+ "log",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "quinn",
+ "rustls",
+ "rustls-pki-types",
+ "rustls-platform-verifier",
+ "serde",
+ "serde_json",
+ "sync_wrapper",
+ "tokio",
+ "tokio-rustls",
+ "tower",
+ "tower-http",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "getrandom 0.2.17",
+ "libc",
+ "untrusted",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "ruint"
+version = "1.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c141e807189ad38a07276942c6623032d3753c8859c146104ac2e4d68865945a"
+dependencies = [
+ "proptest",
+ "rand 0.8.5",
+ "rand 0.9.2",
+ "ruint-macro",
+ "serde_core",
+ "valuable",
+ "zeroize",
+]
+
+[[package]]
+name = "ruint-macro"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18"
+
+[[package]]
+name = "rustc-hash"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustls"
+version = "0.23.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4"
+dependencies = [
+ "aws-lc-rs",
+ "once_cell",
+ "rustls-pki-types",
+ "rustls-webpki",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63"
+dependencies = [
+ "openssl-probe",
+ "rustls-pki-types",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pki-types"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd"
+dependencies = [
+ "web-time",
+ "zeroize",
+]
+
+[[package]]
+name = "rustls-platform-verifier"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784"
+dependencies = [
+ "core-foundation 0.10.1",
+ "core-foundation-sys",
+ "jni",
+ "log",
+ "once_cell",
+ "rustls",
+ "rustls-native-certs",
+ "rustls-platform-verifier-android",
+ "rustls-webpki",
+ "security-framework",
+ "security-framework-sys",
+ "webpki-root-certs",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "rustls-platform-verifier-android"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
+
+[[package]]
+name = "rustls-webpki"
+version = "0.103.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef"
+dependencies = [
+ "aws-lc-rs",
+ "ring",
+ "rustls-pki-types",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939"
+dependencies = [
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "security-framework"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d"
+dependencies = [
+ "bitflags",
+ "core-foundation 0.10.1",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
+
+[[package]]
+name = "serde"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
+dependencies = [
+ "serde_core",
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_core"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.149"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
+dependencies = [
+ "itoa",
+ "memchr",
+ "serde",
+ "serde_core",
+ "zmij",
+]
+
+[[package]]
+name = "sha3"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
+dependencies = [
+ "digest",
+ "keccak",
+]
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "slab"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
+
+[[package]]
+name = "smallvec"
+version = "1.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
+
+[[package]]
+name = "socket2"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
+dependencies = [
+ "libc",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
+
+[[package]]
+name = "subtle"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
+
+[[package]]
+name = "syn"
+version = "2.0.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn-solidity"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53f425ae0b12e2f5ae65542e00898d500d4d318b4baf09f40fd0d410454e9947"
+dependencies = [
+ "paste",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "system-configuration"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b"
+dependencies = [
+ "bitflags",
+ "core-foundation 0.9.4",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
+dependencies = [
+ "thiserror-impl 1.0.69",
+]
+
+[[package]]
+name = "thiserror"
+version = "2.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
+dependencies = [
+ "thiserror-impl 2.0.18",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "2.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tinystr"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d"
+dependencies = [
+ "displaydoc",
+ "zerovec",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f66bf9585cda4b724d3e78ab34b73fb2bbaba9011b9bfdf69dc836382ea13b8c"
+dependencies = [
+ "bytes",
+ "libc",
+ "mio",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
+dependencies = [
+ "rustls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tower"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project-lite",
+ "sync_wrapper",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-http"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
+dependencies = [
+ "bitflags",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "iri-string",
+ "pin-project-lite",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+
+[[package]]
+name = "tower-service"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
+
+[[package]]
+name = "tracing"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
+dependencies = [
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+
+[[package]]
+name = "typenum"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
+
+[[package]]
+name = "unarray"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "url"
+version = "2.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf8_iter"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+
+[[package]]
+name = "valuable"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
+
+[[package]]
+name = "version_check"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.1+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
+
+[[package]]
+name = "wasip2"
+version = "1.0.2+wasi-0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
+dependencies = [
+ "wit-bindgen",
+]
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "wasm-bindgen-macro",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2"
+dependencies = [
+ "bumpalo",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "web-time"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-root-certs"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca"
+dependencies = [
+ "rustls-pki-types",
+]
+
+[[package]]
+name = "winapi-util"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
+dependencies = [
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "windows-link"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+
+[[package]]
+name = "windows-registry"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"
+dependencies = [
+ "windows-link",
+ "windows-result",
+ "windows-strings",
+]
+
+[[package]]
+name = "windows-result"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.60.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
+dependencies = [
+ "windows-targets 0.53.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.61.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.6",
+ "windows_aarch64_msvc 0.52.6",
+ "windows_i686_gnu 0.52.6",
+ "windows_i686_gnullvm 0.52.6",
+ "windows_i686_msvc 0.52.6",
+ "windows_x86_64_gnu 0.52.6",
+ "windows_x86_64_gnullvm 0.52.6",
+ "windows_x86_64_msvc 0.52.6",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.53.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
+dependencies = [
+ "windows-link",
+ "windows_aarch64_gnullvm 0.53.1",
+ "windows_aarch64_msvc 0.53.1",
+ "windows_i686_gnu 0.53.1",
+ "windows_i686_gnullvm 0.53.1",
+ "windows_i686_msvc 0.53.1",
+ "windows_x86_64_gnu 0.53.1",
+ "windows_x86_64_gnullvm 0.53.1",
+ "windows_x86_64_msvc 0.53.1",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
+
+[[package]]
+name = "winnow"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"
+
+[[package]]
+name = "wit-bindgen"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
+
+[[package]]
+name = "writeable"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
+
+[[package]]
+name = "yoke"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca"
+dependencies = [
+ "stable_deref_trait",
+ "yoke-derive",
+ "zerofrom",
+]
+
+[[package]]
+name = "yoke-derive"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "synstructure",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "zerofrom"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df"
+dependencies = [
+ "zerofrom-derive",
+]
+
+[[package]]
+name = "zerofrom-derive"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "synstructure",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
+
+[[package]]
+name = "zerotrie"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf"
+dependencies = [
+ "displaydoc",
+ "yoke",
+ "zerofrom",
+]
+
+[[package]]
+name = "zerovec"
+version = "0.11.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239"
+dependencies = [
+ "yoke",
+ "zerofrom",
+ "zerovec-derive",
+]
+
+[[package]]
+name = "zerovec-derive"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "zmij"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
diff --git a/contracts/Cargo.toml b/contracts/Cargo.toml
new file mode 100644
index 0000000000..1276ea0e99
--- /dev/null
+++ b/contracts/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "contracts-generate"
+version = "0.1.0"
+edition = "2024"
+publish = false
+
+[workspace]
+
+[dependencies]
+alloy-sol-macro-expander = "1.4.1"
+alloy-sol-macro-input = { version = "1.4.1", features = ["json"] }
+anyhow = "1.0.100"
+prettyplease = "0.2.37"
+proc-macro2 = "1.0.103"
+quote = "1.0.41"
+rayon = "1"
+reqwest = { version = "0.13", features = ["blocking", "json"] }
+serde_json = "1.0.117"
+syn = "2.0.108"
diff --git a/crates/contracts/LICENSE-APACHE b/contracts/LICENSE-APACHE
similarity index 100%
rename from crates/contracts/LICENSE-APACHE
rename to contracts/LICENSE-APACHE
diff --git a/crates/contracts/LICENSE-MIT b/contracts/LICENSE-MIT
similarity index 100%
rename from crates/contracts/LICENSE-MIT
rename to contracts/LICENSE-MIT
diff --git a/contracts/README.md b/contracts/README.md
new file mode 100644
index 0000000000..e40fd74958
--- /dev/null
+++ b/contracts/README.md
@@ -0,0 +1,60 @@
+# cow-contracts
+
+Alloy-based Rust contract bindings for the CoW Protocol ecosystem.
+
+Each smart contract gets its own crate for parallel compilation. The `contracts` facade crate re-exports everything under a single API.
+
+## Usage
+
+Add to your `Cargo.toml`:
+
+```toml
+contracts = { git = "https://github.com/cowprotocol/cow-contracts" }
+```
+
+Then use:
+
+```rust
+use contracts::alloy::{GPv2Settlement, ERC20, WETH9};
+```
+
+## Adding a new contract
+
+1. Add the ABI artifact JSON to `artifacts/` (manually or via `cargo run -p contracts-generate -- vendor`)
+2. Add the contract definition to `crates/contracts-generate/src/main.rs`
+3. Run `cargo run -p contracts-generate`
+4. Run `cargo check -p contracts` to verify
+5. Commit and open a PR
+
+## Commands
+
+From the repository root, use `just`:
+
+```bash
+just setup # Vendor artifacts, generate bindings, and format everything
+just generate-contracts # Generate bindings from artifacts only
+```
+
+Or use the `contracts-generate` binary directly:
+
+```bash
+cargo run -p contracts-generate # Generate bindings from artifacts
+cargo run -p contracts-generate -- vendor # Download/update ABI artifacts
+cargo run -p contracts-generate -- all # Vendor artifacts then generate bindings
+```
+
+The `generate` command regenerates all per-contract crates in `generated/`, updates the facade module at `crates/contracts/src/alloy/mod.rs`, and updates the dependency section in `crates/contracts/Cargo.toml`.
+
+## Compiling Solidity contracts
+
+Custom support/test contracts live in `solidity/`. To recompile:
+
+```bash
+cd solidity && make artifacts
+```
+
+Requires Docker with the `ethereum/solc:0.8.30` image.
+
+## License
+
+Licensed under either of [Apache License, Version 2.0](LICENSE-APACHE) or [MIT license](LICENSE-MIT) at your option.
diff --git a/crates/contracts/artifacts/AnyoneAuthenticator.json b/contracts/artifacts/AnyoneAuthenticator.json
similarity index 100%
rename from crates/contracts/artifacts/AnyoneAuthenticator.json
rename to contracts/artifacts/AnyoneAuthenticator.json
diff --git a/crates/contracts/artifacts/BalancerQueries.json b/contracts/artifacts/BalancerQueries.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerQueries.json
rename to contracts/artifacts/BalancerQueries.json
index 1700f74239..d3caf7f0c3 100644
--- a/crates/contracts/artifacts/BalancerQueries.json
+++ b/contracts/artifacts/BalancerQueries.json
@@ -11,6 +11,19 @@
"stateMutability": "nonpayable",
"type": "constructor"
},
+ {
+ "inputs": [],
+ "name": "vault",
+ "outputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
{
"inputs": [
{
@@ -93,7 +106,9 @@
],
"stateMutability": "nonpayable",
"type": "function"
- },
+ }
+ ],
+ "_disabled": [
{
"inputs": [
{
@@ -293,19 +308,6 @@
],
"stateMutability": "nonpayable",
"type": "function"
- },
- {
- "inputs": [],
- "name": "vault",
- "outputs": [
- {
- "internalType": "contract IVault",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
}
]
-}
\ No newline at end of file
+}
diff --git a/crates/contracts/artifacts/BalancerV2Authorizer.json b/contracts/artifacts/BalancerV2Authorizer.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV2Authorizer.json
rename to contracts/artifacts/BalancerV2Authorizer.json
index 6785e8ea0b..57d5ad3163 100644
--- a/crates/contracts/artifacts/BalancerV2Authorizer.json
+++ b/contracts/artifacts/BalancerV2Authorizer.json
@@ -86,6 +86,90 @@
"name": "RoleRevoked",
"type": "event"
},
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "role",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "grantRole",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32[]",
+ "name": "roles",
+ "type": "bytes32[]"
+ },
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "grantRoles",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x608060405234801561001057600080fd5b50604051610e1d380380610e1d8339818101604052602081101561003357600080fd5b5051610040600082610046565b5061013d565b6100508282610054565b5050565b6000828152602081815260409091206100769183906108946100b7821b17901c565b156100505760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b60006100c3838361011c565b61011257508154600180820184556000848152602080822090930180546001600160a01b0319166001600160a01b03861690811790915585549082528286019093526040902091909155610116565b5060005b92915050565b6001600160a01b031660009081526001919091016020526040902054151590565b610cd18061014c6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063988360a31161008c578063a73cb2ab11610066578063a73cb2ab1461044b578063ca15c87314610572578063d547741f1461058f578063fcd7627e146105c8576100df565b8063988360a3146103475780639be2a88414610402578063a217fddf14610443576100df565b806336568abe116100bd57806336568abe146102755780639010d07c146102ae57806391d14854146102fa576100df565b806318b2cde9146100e4578063248a9ca31461020d5780632f2ff15d1461023c575b600080fd5b61020b600480360360408110156100fa57600080fd5b81019060208101813564010000000081111561011557600080fd5b82018360208201111561012757600080fd5b8035906020019184602083028401116401000000008311171561014957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561019957600080fd5b8201836020820111156101ab57600080fd5b803590602001918460208302840111640100000000831117156101cd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610683945050505050565b005b61022a6004803603602081101561022357600080fd5b50356106d8565b60408051918252519081900360200190f35b61020b6004803603604081101561025257600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff166106ed565b61020b6004803603604081101561028b57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610723565b6102d1600480360360408110156102c457600080fd5b5080359060200135610751565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103336004803603604081101561031057600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610772565b604080519115158252519081900360200190f35b61020b6004803603604081101561035d57600080fd5b81019060208101813564010000000081111561037857600080fd5b82018360208201111561038a57600080fd5b803590602001918460208302840111640100000000831117156103ac57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050903573ffffffffffffffffffffffffffffffffffffffff16915061078a9050565b6103336004803603606081101561041857600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff602082013581169160400135166107bb565b61022a6107cf565b61020b6004803603604081101561046157600080fd5b81019060208101813564010000000081111561047c57600080fd5b82018360208201111561048e57600080fd5b803590602001918460208302840111640100000000831117156104b057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561050057600080fd5b82018360208201111561051257600080fd5b8035906020019184602083028401116401000000008311171561053457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506107d4945050505050565b61022a6004803603602081101561058857600080fd5b5035610824565b61020b600480360360408110156105a557600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661083b565b61020b600480360360408110156105de57600080fd5b8101906020810181356401000000008111156105f957600080fd5b82018360208201111561060b57600080fd5b8035906020019184602083028401116401000000008311171561062d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050903573ffffffffffffffffffffffffffffffffffffffff1691506108639050565b61068f8251825161091c565b60005b82518110156106d3576106cb8382815181106106aa57fe5b60200260200101518383815181106106be57fe5b602002602001015161083b565b600101610692565b505050565b60009081526020819052604090206002015490565b6000828152602081905260409020600201546107159061070d9033610772565b6101a6610925565b61071f8282610933565b5050565b61074773ffffffffffffffffffffffffffffffffffffffff821633146101a8610925565b61071f8282610999565b600082815260208190526040812061076990836109ff565b90505b92915050565b60008281526020819052604081206107699083610a1b565b60005b82518110156106d3576107b38382815181106107a557fe5b60200260200101518361083b565b60010161078d565b60006107c78484610772565b949350505050565b600081565b6107e08251825161091c565b60005b82518110156106d35761081c8382815181106107fb57fe5b602002602001015183838151811061080f57fe5b60200260200101516106ed565b6001016107e3565b600081815260208190526040812061076c90610a49565b6000828152602081905260409020600201546107479061085b9033610772565b6101a7610925565b60005b82518110156106d35761088c83828151811061087e57fe5b6020026020010151836106ed565b600101610866565b60006108a08383610a1b565b61091457508154600180820184556000848152602080822090930180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558554908252828601909352604090209190915561076c565b50600061076c565b61071f81831460675b8161071f5761071f81610a4d565b600082815260208190526040902061094b9082610894565b1561071f57604051339073ffffffffffffffffffffffffffffffffffffffff83169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b60008281526020819052604090206109b19082610aba565b1561071f57604051339073ffffffffffffffffffffffffffffffffffffffff83169084907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90600090a45050565b8154600090610a119083106064610925565b6107698383610c61565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001919091016020526040902054151590565b5490565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120548015610c575783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019190810190600090879083908110610b2257fe5b600091825260209091200154875473ffffffffffffffffffffffffffffffffffffffff90911691508190889085908110610b5857fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055918316815260018981019092526040902090840190558654879080610bc657fe5b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff8816825260018981019091526040822091909155945061076c9350505050565b600091505061076c565b6000826000018281548110610c7257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16939250505056fea2646970667358221220dfe715d2cd44c733089f2c396b8ba6a91ca4ec5b907632f366d4d8a9814a53d364736f6c63430007010033",
+ "devdoc": {
+ "details": "Basic Authorizer implementation, based on OpenZeppelin's Access Control. Users are allowed to perform actions if they have the role with the same identifier. In this sense, roles are not being truly used as such, since they each map to a single action identifier. This temporary implementation is expected to be replaced soon after launch by a more sophisticated one, able to manage permissions across multiple contracts and to natively handle timelocks.",
+ "kind": "dev",
+ "methods": {
+ "getRoleAdmin(bytes32)": {
+ "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."
+ },
+ "getRoleMember(bytes32,uint256)": {
+ "details": "Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information."
+ },
+ "getRoleMemberCount(bytes32)": {
+ "details": "Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role."
+ },
+ "grantRole(bytes32,address)": {
+ "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role."
+ },
+ "grantRoles(bytes32[],address)": {
+ "details": "Grants multiple roles to a single account."
+ },
+ "grantRolesToMany(bytes32[],address[])": {
+ "details": "Grants roles to a list of accounts."
+ },
+ "hasRole(bytes32,address)": {
+ "details": "Returns `true` if `account` has been granted `role`."
+ },
+ "renounceRole(bytes32,address)": {
+ "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`."
+ },
+ "revokeRole(bytes32,address)": {
+ "details": "Revokes `role` from `account`. If `account` had already been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role."
+ },
+ "revokeRoles(bytes32[],address)": {
+ "details": "Revokes multiple roles from a single account."
+ },
+ "revokeRolesFromMany(bytes32[],address[])": {
+ "details": "Revokes roles from a list of accounts."
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ },
+ "_disabled": [
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
@@ -190,42 +274,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "role",
- "type": "bytes32"
- },
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "grantRole",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes32[]",
- "name": "roles",
- "type": "bytes32[]"
- },
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "grantRoles",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -340,51 +388,5 @@
"stateMutability": "nonpayable",
"type": "function"
}
- ],
- "bytecode": "0x608060405234801561001057600080fd5b50604051610e1d380380610e1d8339818101604052602081101561003357600080fd5b5051610040600082610046565b5061013d565b6100508282610054565b5050565b6000828152602081815260409091206100769183906108946100b7821b17901c565b156100505760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b60006100c3838361011c565b61011257508154600180820184556000848152602080822090930180546001600160a01b0319166001600160a01b03861690811790915585549082528286019093526040902091909155610116565b5060005b92915050565b6001600160a01b031660009081526001919091016020526040902054151590565b610cd18061014c6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063988360a31161008c578063a73cb2ab11610066578063a73cb2ab1461044b578063ca15c87314610572578063d547741f1461058f578063fcd7627e146105c8576100df565b8063988360a3146103475780639be2a88414610402578063a217fddf14610443576100df565b806336568abe116100bd57806336568abe146102755780639010d07c146102ae57806391d14854146102fa576100df565b806318b2cde9146100e4578063248a9ca31461020d5780632f2ff15d1461023c575b600080fd5b61020b600480360360408110156100fa57600080fd5b81019060208101813564010000000081111561011557600080fd5b82018360208201111561012757600080fd5b8035906020019184602083028401116401000000008311171561014957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561019957600080fd5b8201836020820111156101ab57600080fd5b803590602001918460208302840111640100000000831117156101cd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610683945050505050565b005b61022a6004803603602081101561022357600080fd5b50356106d8565b60408051918252519081900360200190f35b61020b6004803603604081101561025257600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff166106ed565b61020b6004803603604081101561028b57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610723565b6102d1600480360360408110156102c457600080fd5b5080359060200135610751565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103336004803603604081101561031057600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610772565b604080519115158252519081900360200190f35b61020b6004803603604081101561035d57600080fd5b81019060208101813564010000000081111561037857600080fd5b82018360208201111561038a57600080fd5b803590602001918460208302840111640100000000831117156103ac57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050903573ffffffffffffffffffffffffffffffffffffffff16915061078a9050565b6103336004803603606081101561041857600080fd5b5080359073ffffffffffffffffffffffffffffffffffffffff602082013581169160400135166107bb565b61022a6107cf565b61020b6004803603604081101561046157600080fd5b81019060208101813564010000000081111561047c57600080fd5b82018360208201111561048e57600080fd5b803590602001918460208302840111640100000000831117156104b057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561050057600080fd5b82018360208201111561051257600080fd5b8035906020019184602083028401116401000000008311171561053457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506107d4945050505050565b61022a6004803603602081101561058857600080fd5b5035610824565b61020b600480360360408110156105a557600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661083b565b61020b600480360360408110156105de57600080fd5b8101906020810181356401000000008111156105f957600080fd5b82018360208201111561060b57600080fd5b8035906020019184602083028401116401000000008311171561062d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050903573ffffffffffffffffffffffffffffffffffffffff1691506108639050565b61068f8251825161091c565b60005b82518110156106d3576106cb8382815181106106aa57fe5b60200260200101518383815181106106be57fe5b602002602001015161083b565b600101610692565b505050565b60009081526020819052604090206002015490565b6000828152602081905260409020600201546107159061070d9033610772565b6101a6610925565b61071f8282610933565b5050565b61074773ffffffffffffffffffffffffffffffffffffffff821633146101a8610925565b61071f8282610999565b600082815260208190526040812061076990836109ff565b90505b92915050565b60008281526020819052604081206107699083610a1b565b60005b82518110156106d3576107b38382815181106107a557fe5b60200260200101518361083b565b60010161078d565b60006107c78484610772565b949350505050565b600081565b6107e08251825161091c565b60005b82518110156106d35761081c8382815181106107fb57fe5b602002602001015183838151811061080f57fe5b60200260200101516106ed565b6001016107e3565b600081815260208190526040812061076c90610a49565b6000828152602081905260409020600201546107479061085b9033610772565b6101a7610925565b60005b82518110156106d35761088c83828151811061087e57fe5b6020026020010151836106ed565b600101610866565b60006108a08383610a1b565b61091457508154600180820184556000848152602080822090930180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558554908252828601909352604090209190915561076c565b50600061076c565b61071f81831460675b8161071f5761071f81610a4d565b600082815260208190526040902061094b9082610894565b1561071f57604051339073ffffffffffffffffffffffffffffffffffffffff83169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b60008281526020819052604090206109b19082610aba565b1561071f57604051339073ffffffffffffffffffffffffffffffffffffffff83169084907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90600090a45050565b8154600090610a119083106064610925565b6107698383610c61565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001919091016020526040902054151590565b5490565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120548015610c575783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019190810190600090879083908110610b2257fe5b600091825260209091200154875473ffffffffffffffffffffffffffffffffffffffff90911691508190889085908110610b5857fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055918316815260018981019092526040902090840190558654879080610bc657fe5b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff8816825260018981019091526040822091909155945061076c9350505050565b600091505061076c565b6000826000018281548110610c7257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16939250505056fea2646970667358221220dfe715d2cd44c733089f2c396b8ba6a91ca4ec5b907632f366d4d8a9814a53d364736f6c63430007010033",
- "devdoc": {
- "details": "Basic Authorizer implementation, based on OpenZeppelin's Access Control. Users are allowed to perform actions if they have the role with the same identifier. In this sense, roles are not being truly used as such, since they each map to a single action identifier. This temporary implementation is expected to be replaced soon after launch by a more sophisticated one, able to manage permissions across multiple contracts and to natively handle timelocks.",
- "kind": "dev",
- "methods": {
- "getRoleAdmin(bytes32)": {
- "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."
- },
- "getRoleMember(bytes32,uint256)": {
- "details": "Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information."
- },
- "getRoleMemberCount(bytes32)": {
- "details": "Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role."
- },
- "grantRole(bytes32,address)": {
- "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role."
- },
- "grantRoles(bytes32[],address)": {
- "details": "Grants multiple roles to a single account."
- },
- "grantRolesToMany(bytes32[],address[])": {
- "details": "Grants roles to a list of accounts."
- },
- "hasRole(bytes32,address)": {
- "details": "Returns `true` if `account` has been granted `role`."
- },
- "renounceRole(bytes32,address)": {
- "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`."
- },
- "revokeRole(bytes32,address)": {
- "details": "Revokes `role` from `account`. If `account` had already been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role."
- },
- "revokeRoles(bytes32[],address)": {
- "details": "Revokes multiple roles from a single account."
- },
- "revokeRolesFromMany(bytes32[],address[])": {
- "details": "Revokes roles from a list of accounts."
- }
- },
- "version": 1
- },
- "userdoc": {
- "kind": "user",
- "methods": {},
- "version": 1
- }
-}
\ No newline at end of file
+ ]
+}
diff --git a/crates/contracts/artifacts/BalancerV2BasePool.json b/contracts/artifacts/BalancerV2BasePool.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV2BasePool.json
rename to contracts/artifacts/BalancerV2BasePool.json
index 304a555430..34ffd8baca 100644
--- a/crates/contracts/artifacts/BalancerV2BasePool.json
+++ b/contracts/artifacts/BalancerV2BasePool.json
@@ -170,14 +170,31 @@
"type": "function"
},
{
- "inputs": [
+ "inputs": [],
+ "name": "getPausedState",
+ "outputs": [
{
- "internalType": "bytes4",
- "name": "selector",
- "type": "bytes4"
+ "internalType": "bool",
+ "name": "paused",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "pauseWindowEndTime",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "bufferPeriodEndTime",
+ "type": "uint256"
}
],
- "name": "getActionId",
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPoolId",
"outputs": [
{
"internalType": "bytes32",
@@ -190,12 +207,12 @@
},
{
"inputs": [],
- "name": "getAuthorizer",
+ "name": "getSwapFeePercentage",
"outputs": [
{
- "internalType": "contract IAuthorizer",
+ "internalType": "uint256",
"name": "",
- "type": "address"
+ "type": "uint256"
}
],
"stateMutability": "view",
@@ -203,74 +220,161 @@
},
{
"inputs": [],
- "name": "getOwner",
+ "name": "name",
"outputs": [
{
- "internalType": "address",
+ "internalType": "string",
"name": "",
- "type": "address"
+ "type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [],
- "name": "getPausedState",
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "nonces",
"outputs": [
{
- "internalType": "bool",
- "name": "paused",
- "type": "bool"
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
},
{
"internalType": "uint256",
- "name": "pauseWindowEndTime",
+ "name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
- "name": "bufferPeriodEndTime",
+ "name": "deadline",
"type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
}
],
- "stateMutability": "view",
+ "name": "permit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
- "name": "getPoolId",
+ "name": "symbol",
"outputs": [
{
- "internalType": "bytes32",
+ "internalType": "string",
"name": "",
- "type": "bytes32"
+ "type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [],
- "name": "getSwapFeePercentage",
- "outputs": [
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
{
"internalType": "uint256",
- "name": "",
+ "name": "amount",
"type": "uint256"
}
],
- "stateMutability": "view",
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
"type": "function"
},
{
- "inputs": [],
- "name": "getVault",
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
"outputs": [
{
- "internalType": "contract IVault",
+ "internalType": "bool",
"name": "",
- "type": "address"
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4"
+ }
+ ],
+ "name": "getActionId",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
}
],
"stateMutability": "view",
@@ -278,31 +382,38 @@
},
{
"inputs": [],
- "name": "name",
+ "name": "getAuthorizer",
"outputs": [
{
- "internalType": "string",
+ "internalType": "contract IAuthorizer",
"name": "",
- "type": "string"
+ "type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [
+ "inputs": [],
+ "name": "getOwner",
+ "outputs": [
{
"internalType": "address",
- "name": "owner",
+ "name": "",
"type": "address"
}
],
- "name": "nonces",
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getVault",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "contract IVault",
"name": "",
- "type": "uint256"
+ "type": "address"
}
],
"stateMutability": "view",
@@ -416,49 +527,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "deadline",
- "type": "uint256"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "name": "permit",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -593,19 +661,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [],
- "name": "symbol",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [],
"name": "totalSupply",
@@ -618,59 +673,6 @@
],
"stateMutability": "view",
"type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transfer",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transferFrom",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
}
]
}
diff --git a/crates/contracts/artifacts/BalancerV2BasePoolFactory.json b/contracts/artifacts/BalancerV2BasePoolFactory.json
similarity index 96%
rename from crates/contracts/artifacts/BalancerV2BasePoolFactory.json
rename to contracts/artifacts/BalancerV2BasePoolFactory.json
index b11b9c2e61..cbdd83ddcb 100644
--- a/crates/contracts/artifacts/BalancerV2BasePoolFactory.json
+++ b/contracts/artifacts/BalancerV2BasePoolFactory.json
@@ -12,7 +12,9 @@
],
"name": "PoolCreated",
"type": "event"
- },
+ }
+ ],
+ "_disabled": [
{
"inputs": [],
"name": "getVault",
diff --git a/crates/contracts/artifacts/BalancerV2ComposableStablePool.json b/contracts/artifacts/BalancerV2ComposableStablePool.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV2ComposableStablePool.json
rename to contracts/artifacts/BalancerV2ComposableStablePool.json
index c3c36cdb5d..703f50c58c 100644
--- a/crates/contracts/artifacts/BalancerV2ComposableStablePool.json
+++ b/contracts/artifacts/BalancerV2ComposableStablePool.json
@@ -281,7 +281,74 @@
},
{
"inputs": [],
- "name": "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL",
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
@@ -294,7 +361,66 @@
},
{
"inputs": [],
- "name": "DOMAIN_SEPARATOR",
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getAmplificationParameter",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "isUpdating",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "precision",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPausedState",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "paused",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "pauseWindowEndTime",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "bufferPeriodEndTime",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPoolId",
"outputs": [
{
"internalType": "bytes32",
@@ -305,6 +431,71 @@
"stateMutability": "view",
"type": "function"
},
+ {
+ "inputs": [],
+ "name": "getScalingFactors",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getSwapFeePercentage",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "nonces",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "pause",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
{
"inputs": [
{
@@ -316,14 +507,46 @@
"internalType": "address",
"name": "spender",
"type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
}
],
- "name": "allowance",
+ "name": "permit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "string",
"name": "",
- "type": "uint256"
+ "type": "string"
}
],
"stateMutability": "view",
@@ -333,7 +556,7 @@
"inputs": [
{
"internalType": "address",
- "name": "spender",
+ "name": "recipient",
"type": "address"
},
{
@@ -342,7 +565,7 @@
"type": "uint256"
}
],
- "name": "approve",
+ "name": "transfer",
"outputs": [
{
"internalType": "bool",
@@ -357,29 +580,54 @@
"inputs": [
{
"internalType": "address",
- "name": "account",
+ "name": "sender",
"type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
}
],
- "name": "balanceOf",
+ "name": "transferFrom",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
"name": "",
- "type": "uint256"
+ "type": "string"
}
],
"stateMutability": "view",
"type": "function"
- },
+ }
+ ],
+ "_disabled": [
{
"inputs": [],
- "name": "decimals",
+ "name": "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL",
"outputs": [
{
- "internalType": "uint8",
+ "internalType": "uint256",
"name": "",
- "type": "uint8"
+ "type": "uint256"
}
],
"stateMutability": "view",
@@ -455,29 +703,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [],
- "name": "getAmplificationParameter",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- },
- {
- "internalType": "bool",
- "name": "isUpdating",
- "type": "bool"
- },
- {
- "internalType": "uint256",
- "name": "precision",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [],
"name": "getAuthorizer",
@@ -580,42 +805,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [],
- "name": "getPausedState",
- "outputs": [
- {
- "internalType": "bool",
- "name": "paused",
- "type": "bool"
- },
- {
- "internalType": "uint256",
- "name": "pauseWindowEndTime",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "bufferPeriodEndTime",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getPoolId",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -687,32 +876,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [],
- "name": "getScalingFactors",
- "outputs": [
- {
- "internalType": "uint256[]",
- "name": "",
- "type": "uint256[]"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getSwapFeePercentage",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -835,38 +998,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [],
- "name": "name",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- }
- ],
- "name": "nonces",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -1056,56 +1187,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [],
- "name": "pause",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "deadline",
- "type": "uint256"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "name": "permit",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -1288,19 +1369,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [],
- "name": "symbol",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [],
"name": "totalSupply",
@@ -1314,59 +1382,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transfer",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transferFrom",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [],
"name": "unpause",
@@ -1393,19 +1408,6 @@
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
- },
- {
- "inputs": [],
- "name": "version",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
}
]
-}
\ No newline at end of file
+}
diff --git a/crates/contracts/artifacts/BalancerV2ComposableStablePoolFactory.json b/contracts/artifacts/BalancerV2ComposableStablePoolFactory.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV2ComposableStablePoolFactory.json
rename to contracts/artifacts/BalancerV2ComposableStablePoolFactory.json
index 699b15575d..75d73ce83d 100644
--- a/crates/contracts/artifacts/BalancerV2ComposableStablePoolFactory.json
+++ b/contracts/artifacts/BalancerV2ComposableStablePoolFactory.json
@@ -111,6 +111,21 @@
"stateMutability": "nonpayable",
"type": "function"
},
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
{
"inputs": [
{
@@ -262,19 +277,6 @@
],
"stateMutability": "view",
"type": "function"
- },
- {
- "inputs": [],
- "name": "version",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
}
]
-}
\ No newline at end of file
+}
diff --git a/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV3.json b/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV3.json
new file mode 100644
index 0000000000..75d73ce83d
--- /dev/null
+++ b/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV3.json
@@ -0,0 +1,282 @@
+{
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "vault",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IProtocolFeePercentagesProvider",
+ "name": "protocolFeeProvider",
+ "type": "address"
+ },
+ {
+ "internalType": "string",
+ "name": "factoryVersion",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "poolVersion",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [],
+ "name": "FactoryDisabled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ }
+ ],
+ "name": "PoolCreated",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "contract IERC20[]",
+ "name": "tokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amplificationParameter",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IRateProvider[]",
+ "name": "rateProviders",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "tokenRateCacheDurations",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bool[]",
+ "name": "exemptFromYieldProtocolFeeFlags",
+ "type": "bool[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "swapFeePercentage",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "create",
+ "outputs": [
+ {
+ "internalType": "contract ComposableStablePool",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "disable",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4"
+ }
+ ],
+ "name": "getActionId",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getAuthorizer",
+ "outputs": [
+ {
+ "internalType": "contract IAuthorizer",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getCreationCode",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getCreationCodeContracts",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "contractA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "contractB",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPauseConfiguration",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "pauseWindowDuration",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "bufferPeriodDuration",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPoolVersion",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getProtocolFeePercentagesProvider",
+ "outputs": [
+ {
+ "internalType": "contract IProtocolFeePercentagesProvider",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getVault",
+ "outputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "isDisabled",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ }
+ ],
+ "name": "isPoolFromFactory",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ]
+}
diff --git a/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV4.json b/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV4.json
new file mode 100644
index 0000000000..75d73ce83d
--- /dev/null
+++ b/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV4.json
@@ -0,0 +1,282 @@
+{
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "vault",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IProtocolFeePercentagesProvider",
+ "name": "protocolFeeProvider",
+ "type": "address"
+ },
+ {
+ "internalType": "string",
+ "name": "factoryVersion",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "poolVersion",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [],
+ "name": "FactoryDisabled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ }
+ ],
+ "name": "PoolCreated",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "contract IERC20[]",
+ "name": "tokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amplificationParameter",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IRateProvider[]",
+ "name": "rateProviders",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "tokenRateCacheDurations",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bool[]",
+ "name": "exemptFromYieldProtocolFeeFlags",
+ "type": "bool[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "swapFeePercentage",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "create",
+ "outputs": [
+ {
+ "internalType": "contract ComposableStablePool",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "disable",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4"
+ }
+ ],
+ "name": "getActionId",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getAuthorizer",
+ "outputs": [
+ {
+ "internalType": "contract IAuthorizer",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getCreationCode",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getCreationCodeContracts",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "contractA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "contractB",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPauseConfiguration",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "pauseWindowDuration",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "bufferPeriodDuration",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPoolVersion",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getProtocolFeePercentagesProvider",
+ "outputs": [
+ {
+ "internalType": "contract IProtocolFeePercentagesProvider",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getVault",
+ "outputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "isDisabled",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ }
+ ],
+ "name": "isPoolFromFactory",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ]
+}
diff --git a/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV5.json b/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV5.json
new file mode 100644
index 0000000000..75d73ce83d
--- /dev/null
+++ b/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV5.json
@@ -0,0 +1,282 @@
+{
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "vault",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IProtocolFeePercentagesProvider",
+ "name": "protocolFeeProvider",
+ "type": "address"
+ },
+ {
+ "internalType": "string",
+ "name": "factoryVersion",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "poolVersion",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [],
+ "name": "FactoryDisabled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ }
+ ],
+ "name": "PoolCreated",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "contract IERC20[]",
+ "name": "tokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amplificationParameter",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IRateProvider[]",
+ "name": "rateProviders",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "tokenRateCacheDurations",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bool[]",
+ "name": "exemptFromYieldProtocolFeeFlags",
+ "type": "bool[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "swapFeePercentage",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "create",
+ "outputs": [
+ {
+ "internalType": "contract ComposableStablePool",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "disable",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4"
+ }
+ ],
+ "name": "getActionId",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getAuthorizer",
+ "outputs": [
+ {
+ "internalType": "contract IAuthorizer",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getCreationCode",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getCreationCodeContracts",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "contractA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "contractB",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPauseConfiguration",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "pauseWindowDuration",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "bufferPeriodDuration",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPoolVersion",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getProtocolFeePercentagesProvider",
+ "outputs": [
+ {
+ "internalType": "contract IProtocolFeePercentagesProvider",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getVault",
+ "outputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "isDisabled",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ }
+ ],
+ "name": "isPoolFromFactory",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ]
+}
diff --git a/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV6.json b/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV6.json
new file mode 100644
index 0000000000..75d73ce83d
--- /dev/null
+++ b/contracts/artifacts/BalancerV2ComposableStablePoolFactoryV6.json
@@ -0,0 +1,282 @@
+{
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "vault",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IProtocolFeePercentagesProvider",
+ "name": "protocolFeeProvider",
+ "type": "address"
+ },
+ {
+ "internalType": "string",
+ "name": "factoryVersion",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "poolVersion",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [],
+ "name": "FactoryDisabled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ }
+ ],
+ "name": "PoolCreated",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "contract IERC20[]",
+ "name": "tokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amplificationParameter",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IRateProvider[]",
+ "name": "rateProviders",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "tokenRateCacheDurations",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bool[]",
+ "name": "exemptFromYieldProtocolFeeFlags",
+ "type": "bool[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "swapFeePercentage",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "create",
+ "outputs": [
+ {
+ "internalType": "contract ComposableStablePool",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "disable",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4"
+ }
+ ],
+ "name": "getActionId",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getAuthorizer",
+ "outputs": [
+ {
+ "internalType": "contract IAuthorizer",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getCreationCode",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getCreationCodeContracts",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "contractA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "contractB",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPauseConfiguration",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "pauseWindowDuration",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "bufferPeriodDuration",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPoolVersion",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getProtocolFeePercentagesProvider",
+ "outputs": [
+ {
+ "internalType": "contract IProtocolFeePercentagesProvider",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getVault",
+ "outputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "isDisabled",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ }
+ ],
+ "name": "isPoolFromFactory",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ]
+}
diff --git a/crates/contracts/artifacts/BalancerV2LiquidityBootstrappingPool.json b/contracts/artifacts/BalancerV2LiquidityBootstrappingPool.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV2LiquidityBootstrappingPool.json
rename to contracts/artifacts/BalancerV2LiquidityBootstrappingPool.json
index cb791acd13..c1c66b3f2e 100644
--- a/crates/contracts/artifacts/BalancerV2LiquidityBootstrappingPool.json
+++ b/contracts/artifacts/BalancerV2LiquidityBootstrappingPool.json
@@ -270,38 +270,44 @@
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
+ "inputs": [],
+ "name": "getNormalizedWeights",
+ "outputs": [
{
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
}
],
- "name": "decreaseAllowance",
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPausedState",
"outputs": [
{
"internalType": "bool",
- "name": "",
+ "name": "paused",
"type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "pauseWindowEndTime",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "bufferPeriodEndTime",
+ "type": "uint256"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "bytes4",
- "name": "selector",
- "type": "bytes4"
- }
- ],
- "name": "getActionId",
+ "inputs": [],
+ "name": "getPoolId",
"outputs": [
{
"internalType": "bytes32",
@@ -314,12 +320,12 @@
},
{
"inputs": [],
- "name": "getAuthorizer",
+ "name": "getScalingFactors",
"outputs": [
{
- "internalType": "contract IAuthorizer",
+ "internalType": "uint256[]",
"name": "",
- "type": "address"
+ "type": "uint256[]"
}
],
"stateMutability": "view",
@@ -327,22 +333,12 @@
},
{
"inputs": [],
- "name": "getGradualWeightUpdateParams",
+ "name": "getSwapEnabled",
"outputs": [
{
- "internalType": "uint256",
- "name": "startTime",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "endTime",
- "type": "uint256"
- },
- {
- "internalType": "uint256[]",
- "name": "endWeights",
- "type": "uint256[]"
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
}
],
"stateMutability": "view",
@@ -350,7 +346,7 @@
},
{
"inputs": [],
- "name": "getInvariant",
+ "name": "getSwapFeePercentage",
"outputs": [
{
"internalType": "uint256",
@@ -363,69 +359,180 @@
},
{
"inputs": [],
- "name": "getLastInvariant",
+ "name": "name",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "string",
"name": "",
- "type": "uint256"
+ "type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [],
- "name": "getNormalizedWeights",
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "nonces",
"outputs": [
{
- "internalType": "uint256[]",
+ "internalType": "uint256",
"name": "",
- "type": "uint256[]"
+ "type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "permit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
{
"inputs": [],
- "name": "getOwner",
+ "name": "symbol",
"outputs": [
{
- "internalType": "address",
+ "internalType": "string",
"name": "",
- "type": "address"
+ "type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [],
- "name": "getPausedState",
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
"outputs": [
{
"internalType": "bool",
- "name": "paused",
+ "name": "",
"type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
},
{
"internalType": "uint256",
- "name": "pauseWindowEndTime",
+ "name": "amount",
"type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
},
{
"internalType": "uint256",
- "name": "bufferPeriodEndTime",
+ "name": "amount",
"type": "uint256"
}
],
- "stateMutability": "view",
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
"type": "function"
},
{
- "inputs": [],
- "name": "getPoolId",
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4"
+ }
+ ],
+ "name": "getActionId",
"outputs": [
{
"internalType": "bytes32",
@@ -438,12 +545,12 @@
},
{
"inputs": [],
- "name": "getRate",
+ "name": "getAuthorizer",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "contract IAuthorizer",
"name": "",
- "type": "uint256"
+ "type": "address"
}
],
"stateMutability": "view",
@@ -451,11 +558,21 @@
},
{
"inputs": [],
- "name": "getScalingFactors",
+ "name": "getGradualWeightUpdateParams",
"outputs": [
+ {
+ "internalType": "uint256",
+ "name": "startTime",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "endTime",
+ "type": "uint256"
+ },
{
"internalType": "uint256[]",
- "name": "",
+ "name": "endWeights",
"type": "uint256[]"
}
],
@@ -464,12 +581,12 @@
},
{
"inputs": [],
- "name": "getSwapEnabled",
+ "name": "getInvariant",
"outputs": [
{
- "internalType": "bool",
+ "internalType": "uint256",
"name": "",
- "type": "bool"
+ "type": "uint256"
}
],
"stateMutability": "view",
@@ -477,7 +594,7 @@
},
{
"inputs": [],
- "name": "getSwapFeePercentage",
+ "name": "getLastInvariant",
"outputs": [
{
"internalType": "uint256",
@@ -490,10 +607,10 @@
},
{
"inputs": [],
- "name": "getVault",
+ "name": "getOwner",
"outputs": [
{
- "internalType": "contract IVault",
+ "internalType": "address",
"name": "",
"type": "address"
}
@@ -502,37 +619,26 @@
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "addedValue",
- "type": "uint256"
- }
- ],
- "name": "increaseAllowance",
+ "inputs": [],
+ "name": "getRate",
"outputs": [
{
- "internalType": "bool",
+ "internalType": "uint256",
"name": "",
- "type": "bool"
+ "type": "uint256"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
"inputs": [],
- "name": "name",
+ "name": "getVault",
"outputs": [
{
- "internalType": "string",
+ "internalType": "contract IVault",
"name": "",
- "type": "string"
+ "type": "address"
}
],
"stateMutability": "view",
@@ -542,19 +648,24 @@
"inputs": [
{
"internalType": "address",
- "name": "owner",
+ "name": "spender",
"type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
}
],
- "name": "nonces",
+ "name": "increaseAllowance",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "bool",
"name": "",
- "type": "uint256"
+ "type": "bool"
}
],
- "stateMutability": "view",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -741,49 +852,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "deadline",
- "type": "uint256"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "name": "permit",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -949,19 +1017,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [],
- "name": "symbol",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [],
"name": "totalSupply",
@@ -975,59 +1030,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transfer",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transferFrom",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -1052,4 +1054,4 @@
"type": "function"
}
]
-}
\ No newline at end of file
+}
diff --git a/crates/contracts/artifacts/BalancerV2LiquidityBootstrappingPoolFactory.json b/contracts/artifacts/BalancerV2LiquidityBootstrappingPoolFactory.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV2LiquidityBootstrappingPoolFactory.json
rename to contracts/artifacts/BalancerV2LiquidityBootstrappingPoolFactory.json
index 91bf462796..ab8352a0bb 100644
--- a/crates/contracts/artifacts/BalancerV2LiquidityBootstrappingPoolFactory.json
+++ b/contracts/artifacts/BalancerV2LiquidityBootstrappingPoolFactory.json
@@ -72,7 +72,9 @@
],
"stateMutability": "nonpayable",
"type": "function"
- },
+ }
+ ],
+ "_disabled": [
{
"inputs": [],
"name": "getCreationCode",
@@ -155,4 +157,4 @@
"type": "function"
}
]
-}
\ No newline at end of file
+}
diff --git a/contracts/artifacts/BalancerV2NoProtocolFeeLiquidityBootstrappingPoolFactory.json b/contracts/artifacts/BalancerV2NoProtocolFeeLiquidityBootstrappingPoolFactory.json
new file mode 100644
index 0000000000..ab8352a0bb
--- /dev/null
+++ b/contracts/artifacts/BalancerV2NoProtocolFeeLiquidityBootstrappingPoolFactory.json
@@ -0,0 +1,160 @@
+{
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "vault",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ }
+ ],
+ "name": "PoolCreated",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "contract IERC20[]",
+ "name": "tokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "weights",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "swapFeePercentage",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "swapEnabledOnStart",
+ "type": "bool"
+ }
+ ],
+ "name": "create",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [],
+ "name": "getCreationCode",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getCreationCodeContracts",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "contractA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "contractB",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPauseConfiguration",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "pauseWindowDuration",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "bufferPeriodDuration",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getVault",
+ "outputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ }
+ ],
+ "name": "isPoolFromFactory",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ]
+}
diff --git a/crates/contracts/artifacts/BalancerV2StablePool.json b/contracts/artifacts/BalancerV2StablePool.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV2StablePool.json
rename to contracts/artifacts/BalancerV2StablePool.json
index 764622b457..e82fb11951 100644
--- a/crates/contracts/artifacts/BalancerV2StablePool.json
+++ b/contracts/artifacts/BalancerV2StablePool.json
@@ -265,38 +265,54 @@
"type": "function"
},
{
- "inputs": [
+ "inputs": [],
+ "name": "getAmplificationParameter",
+ "outputs": [
{
- "internalType": "address",
- "name": "spender",
- "type": "address"
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "isUpdating",
+ "type": "bool"
},
{
"internalType": "uint256",
- "name": "amount",
+ "name": "precision",
"type": "uint256"
}
],
- "name": "decreaseAllowance",
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPausedState",
"outputs": [
{
"internalType": "bool",
- "name": "",
+ "name": "paused",
"type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "pauseWindowEndTime",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "bufferPeriodEndTime",
+ "type": "uint256"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "bytes4",
- "name": "selector",
- "type": "bytes4"
- }
- ],
- "name": "getActionId",
+ "inputs": [],
+ "name": "getPoolId",
"outputs": [
{
"internalType": "bytes32",
@@ -309,21 +325,11 @@
},
{
"inputs": [],
- "name": "getAmplificationParameter",
+ "name": "getSwapFeePercentage",
"outputs": [
{
"internalType": "uint256",
- "name": "value",
- "type": "uint256"
- },
- {
- "internalType": "bool",
- "name": "isUpdating",
- "type": "bool"
- },
- {
- "internalType": "uint256",
- "name": "precision",
+ "name": "",
"type": "uint256"
}
],
@@ -332,105 +338,147 @@
},
{
"inputs": [],
- "name": "getAuthorizer",
+ "name": "name",
"outputs": [
{
- "internalType": "contract IAuthorizer",
+ "internalType": "string",
"name": "",
- "type": "address"
+ "type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [],
- "name": "getOwner",
- "outputs": [
+ "inputs": [
{
"internalType": "address",
- "name": "",
+ "name": "owner",
"type": "address"
}
],
+ "name": "nonces",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [],
- "name": "getPausedState",
- "outputs": [
+ "inputs": [
{
- "internalType": "bool",
- "name": "paused",
- "type": "bool"
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
},
{
"internalType": "uint256",
- "name": "pauseWindowEndTime",
+ "name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
- "name": "bufferPeriodEndTime",
+ "name": "deadline",
"type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
}
],
- "stateMutability": "view",
+ "name": "permit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
- "name": "getPoolId",
+ "name": "symbol",
"outputs": [
{
- "internalType": "bytes32",
+ "internalType": "string",
"name": "",
- "type": "bytes32"
+ "type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [],
- "name": "getRate",
- "outputs": [
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
{
"internalType": "uint256",
- "name": "",
+ "name": "amount",
"type": "uint256"
}
],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getSwapFeePercentage",
+ "name": "transfer",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "bool",
"name": "",
- "type": "uint256"
+ "type": "bool"
}
],
- "stateMutability": "view",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
- "inputs": [],
- "name": "getVault",
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
"outputs": [
{
- "internalType": "contract IVault",
+ "internalType": "bool",
"name": "",
- "type": "address"
+ "type": "bool"
}
],
- "stateMutability": "view",
+ "stateMutability": "nonpayable",
"type": "function"
- },
+ }
+ ],
+ "_disabled": [
{
"inputs": [
{
@@ -440,11 +488,11 @@
},
{
"internalType": "uint256",
- "name": "addedValue",
+ "name": "amount",
"type": "uint256"
}
],
- "name": "increaseAllowance",
+ "name": "decreaseAllowance",
"outputs": [
{
"internalType": "bool",
@@ -455,28 +503,54 @@
"stateMutability": "nonpayable",
"type": "function"
},
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4"
+ }
+ ],
+ "name": "getActionId",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
{
"inputs": [],
- "name": "name",
+ "name": "getAuthorizer",
"outputs": [
{
- "internalType": "string",
+ "internalType": "contract IAuthorizer",
"name": "",
- "type": "string"
+ "type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [
+ "inputs": [],
+ "name": "getOwner",
+ "outputs": [
{
"internalType": "address",
- "name": "owner",
+ "name": "",
"type": "address"
}
],
- "name": "nonces",
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getRate",
"outputs": [
{
"internalType": "uint256",
@@ -487,6 +561,43 @@
"stateMutability": "view",
"type": "function"
},
+ {
+ "inputs": [],
+ "name": "getVault",
+ "outputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
{
"inputs": [
{
@@ -752,49 +863,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "deadline",
- "type": "uint256"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "name": "permit",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -972,19 +1040,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [],
- "name": "symbol",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [],
"name": "totalSupply",
@@ -997,59 +1052,6 @@
],
"stateMutability": "view",
"type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transfer",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transferFrom",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
}
]
-}
\ No newline at end of file
+}
diff --git a/crates/contracts/artifacts/BalancerV2StablePoolFactoryV2.json b/contracts/artifacts/BalancerV2StablePoolFactoryV2.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV2StablePoolFactoryV2.json
rename to contracts/artifacts/BalancerV2StablePoolFactoryV2.json
index 72bf185cf6..1492dde6b1 100644
--- a/crates/contracts/artifacts/BalancerV2StablePoolFactoryV2.json
+++ b/contracts/artifacts/BalancerV2StablePoolFactoryV2.json
@@ -80,7 +80,9 @@
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
- },
+ }
+ ],
+ "_disabled": [
{
"inputs": [
{
@@ -208,4 +210,4 @@
"type": "function"
}
]
-}
\ No newline at end of file
+}
diff --git a/crates/contracts/artifacts/BalancerV2Vault.json b/contracts/artifacts/BalancerV2Vault.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV2Vault.json
rename to contracts/artifacts/BalancerV2Vault.json
index 628e630583..e0291e07fe 100644
--- a/crates/contracts/artifacts/BalancerV2Vault.json
+++ b/contracts/artifacts/BalancerV2Vault.json
@@ -344,6 +344,10 @@
"name": "TokensRegistered",
"type": "event"
},
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ },
{
"inputs": [],
"name": "WETH",
@@ -453,95 +457,214 @@
{
"inputs": [
{
- "internalType": "bytes32",
- "name": "poolId",
- "type": "bytes32"
+ "internalType": "contract IFlashLoanRecipient",
+ "name": "recipient",
+ "type": "address"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes",
+ "name": "userData",
+ "type": "bytes"
}
],
- "name": "deregisterTokens",
+ "name": "flashLoan",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "user",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20[]",
+ "name": "tokens",
+ "type": "address[]"
+ }
+ ],
+ "name": "getInternalBalance",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "balances",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPausedState",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "paused",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "pauseWindowEndTime",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "bufferPeriodEndTime",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
{
"inputs": [
{
"internalType": "bytes32",
"name": "poolId",
"type": "bytes32"
- },
+ }
+ ],
+ "name": "getPool",
+ "outputs": [
{
"internalType": "address",
- "name": "sender",
+ "name": "",
"type": "address"
},
{
- "internalType": "address payable",
- "name": "recipient",
+ "internalType": "enum IVault.PoolSpecialization",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "poolId",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getPoolTokens",
+ "outputs": [
+ {
+ "internalType": "contract IERC20[]",
+ "name": "tokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "balances",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "lastChangeBlock",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "user",
"type": "address"
},
+ {
+ "internalType": "address",
+ "name": "relayer",
+ "type": "address"
+ }
+ ],
+ "name": "hasApprovedRelayer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
{
"components": [
{
- "internalType": "contract IAsset[]",
- "name": "assets",
- "type": "address[]"
+ "internalType": "enum IVault.UserBalanceOpKind",
+ "name": "kind",
+ "type": "uint8"
},
{
- "internalType": "uint256[]",
- "name": "minAmountsOut",
- "type": "uint256[]"
+ "internalType": "contract IAsset",
+ "name": "asset",
+ "type": "address"
},
{
- "internalType": "bytes",
- "name": "userData",
- "type": "bytes"
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
},
{
- "internalType": "bool",
- "name": "toInternalBalance",
- "type": "bool"
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address payable",
+ "name": "recipient",
+ "type": "address"
}
],
- "internalType": "struct IVault.ExitPoolRequest",
- "name": "request",
- "type": "tuple"
+ "internalType": "struct IVault.UserBalanceOp[]",
+ "name": "ops",
+ "type": "tuple[]"
}
],
- "name": "exitPool",
+ "name": "manageUserBalance",
"outputs": [],
- "stateMutability": "nonpayable",
+ "stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
- "internalType": "contract IFlashLoanRecipient",
- "name": "recipient",
+ "internalType": "address",
+ "name": "sender",
"type": "address"
},
{
- "internalType": "contract IERC20[]",
- "name": "tokens",
- "type": "address[]"
- },
- {
- "internalType": "uint256[]",
- "name": "amounts",
- "type": "uint256[]"
+ "internalType": "address",
+ "name": "relayer",
+ "type": "address"
},
{
- "internalType": "bytes",
- "name": "userData",
- "type": "bytes"
+ "internalType": "bool",
+ "name": "approved",
+ "type": "bool"
}
],
- "name": "flashLoan",
+ "name": "setRelayerApproval",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
@@ -549,86 +672,176 @@
{
"inputs": [
{
- "internalType": "bytes4",
- "name": "selector",
- "type": "bytes4"
- }
- ],
- "name": "getActionId",
- "outputs": [
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "poolId",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "enum IVault.SwapKind",
+ "name": "kind",
+ "type": "uint8"
+ },
+ {
+ "internalType": "contract IAsset",
+ "name": "assetIn",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IAsset",
+ "name": "assetOut",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "userData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct IVault.SingleSwap",
+ "name": "singleSwap",
+ "type": "tuple"
+ },
{
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
+ "components": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "fromInternalBalance",
+ "type": "bool"
+ },
+ {
+ "internalType": "address payable",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "toInternalBalance",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct IVault.FundManagement",
+ "name": "funds",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "limit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
}
],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getAuthorizer",
+ "name": "swap",
"outputs": [
{
- "internalType": "contract IAuthorizer",
- "name": "",
- "type": "address"
+ "internalType": "uint256",
+ "name": "amountCalculated",
+ "type": "uint256"
}
],
- "stateMutability": "view",
+ "stateMutability": "payable",
"type": "function"
- },
+ }
+ ],
+ "bytecode": "0x6101806040523480156200001257600080fd5b5060405162006ed638038062006ed6833981016040819052620000359162000253565b8382826040518060400160405280601181526020017010985b185b98d95c88158c8815985d5b1d607a1b81525080604051806040016040528060018152602001603160f81b815250306001600160a01b031660001b89806001600160a01b03166080816001600160a01b031660601b815250505030604051620000b89062000245565b620000c491906200029f565b604051809103906000f080158015620000e1573d6000803e3d6000fd5b5060601b6001600160601b03191660a052600160005560c052815160209283012060e052805191012061010052507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61012052620001486276a70083111561019462000181565b6200015c62278d0082111561019562000181565b429091016101408190520161016052620001768162000196565b5050505050620002cc565b8162000192576200019281620001f2565b5050565b6040516001600160a01b038216907f94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef90600090a2600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b610be680620062f083390190565b6000806000806080858703121562000269578384fd5b84516200027681620002b3565b60208601519094506200028981620002b3565b6040860151606090960151949790965092505050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114620002c957600080fd5b50565b60805160601c60a05160601c60c05160e05161010051610120516101405161016051615fc06200033060003980611aed525080611ac952508061289f5250806128e15250806128c05250806110fd5250806113b15250806105285250615fc06000f3fe6080604052600436106101a55760003560e01c8063945bcec9116100e1578063e6c460921161008a578063f84d066e11610064578063f84d066e1461048a578063f94d4668146104aa578063fa6e671d146104d9578063fec90d72146104f9576101d3565b8063e6c4609214610427578063ed24911d14610447578063f6c009271461045c576101d3565b8063b05f8e48116100bb578063b05f8e48146103cf578063b95cac28146103ff578063d2946c2b14610412576101d3565b8063945bcec914610385578063aaabadc514610398578063ad5c4648146103ba576101d3565b806352bbbe291161014e5780637d3aeb96116101285780637d3aeb9614610305578063851c1bb3146103255780638bdb39131461034557806390193b7c14610365576101d3565b806352bbbe29146102b25780635c38449e146102c557806366a9c7d2146102e5576101d3565b80630f5a6efa1161017f5780630f5a6efa1461024157806316c38b3c1461026e5780631c0de0511461028e576101d3565b8063058a628f146101d857806309b2760f146101f85780630e8e3e841461022e576101d3565b366101d3576101d16101b5610526565b6001600160a01b0316336001600160a01b03161461020661054b565b005b600080fd5b3480156101e457600080fd5b506101d16101f3366004615157565b61055d565b34801561020457600080fd5b506102186102133660046156e6565b610581565b6040516102259190615d3e565b60405180910390f35b6101d161023c36600461531e565b610634565b34801561024d57600080fd5b5061026161025c3660046151f5565b610770565b6040516102259190615d08565b34801561027a57600080fd5b506101d161028936600461545c565b610806565b34801561029a57600080fd5b506102a361081f565b60405161022593929190615d26565b6102186102c036600461588f565b610848565b3480156102d157600080fd5b506101d16102e036600461565b565b6109e9565b3480156102f157600080fd5b506101d1610300366004615545565b610e06565b34801561031157600080fd5b506101d1610320366004615516565b610fa5565b34801561033157600080fd5b50610218610340366004615633565b6110f9565b34801561035157600080fd5b506101d16103603660046154ac565b61114b565b34801561037157600080fd5b50610218610380366004615157565b611161565b610261610393366004615786565b61117c565b3480156103a457600080fd5b506103ad6112b0565b6040516102259190615b63565b3480156103c657600080fd5b506103ad6112c4565b3480156103db57600080fd5b506103ef6103ea36600461560f565b6112d3565b6040516102259493929190615eb9565b6101d161040d3660046154ac565b611396565b34801561041e57600080fd5b506103ad6113af565b34801561043357600080fd5b506101d1610442366004615243565b6113d3565b34801561045357600080fd5b506102186114ef565b34801561046857600080fd5b5061047c610477366004615494565b6114f9565b604051610225929190615b9b565b34801561049657600080fd5b506102616104a5366004615702565b611523565b3480156104b657600080fd5b506104ca6104c5366004615494565b611620565b60405161022593929190615cd2565b3480156104e557600080fd5b506101d16104f43660046151ab565b611654565b34801561050557600080fd5b50610519610514366004615173565b6116e6565b6040516102259190615d1b565b7f00000000000000000000000000000000000000000000000000000000000000005b90565b8161055957610559816116fb565b5050565b610565611768565b61056d611781565b610576816117af565b61057e611822565b50565b600061058b611768565b610593611829565b60006105a2338460065461183e565b6000818152600560205260409020549091506105c49060ff16156101f461054b565b60008181526005602052604090819020805460ff1916600190811790915560068054909101905551339082907f3c13bc30b8e878c53fd2a36b679409c073afd75950be43d8858768e956fbc20e9061061d908790615e3a565b60405180910390a3905061062f611822565b919050565b61063c611768565b6000806000805b845181101561075b5760008060008060006106718a878151811061066357fe5b60200260200101518961187d565b9c50939850919650945092509050600185600381111561068d57fe5b14156106a45761069f848383866118f5565b61074a565b866106b6576106b1611829565b600196505b60008560038111156106c457fe5b14156106f5576106d684838386611918565b6106df84611938565b1561069f576106ee8984611945565b985061074a565b61070a61070185611938565b1561020761054b565b600061071585610548565b9050600286600381111561072557fe5b141561073c5761073781848487611957565b610748565b61074881848487611970565b505b505060019093019250610643915050565b50610765836119de565b50505061057e611822565b6060815167ffffffffffffffff8111801561078a57600080fd5b506040519080825280602002602001820160405280156107b4578160200160208202803683370190505b50905060005b82518110156107ff576107e0848483815181106107d357fe5b6020026020010151611a01565b8282815181106107ec57fe5b60209081029190910101526001016107ba565b5092915050565b61080e611768565b610816611781565b61057681611a2c565b600080600061082c611aaa565b159250610837611ac7565b9150610841611aeb565b9050909192565b6000610852611768565b61085a611829565b835161086581611b0f565b610874834211156101fc61054b565b61088760008760800151116101fe61054b565b60006108968760400151611b41565b905060006108a78860600151611b41565b90506108ca816001600160a01b0316836001600160a01b031614156101fd61054b565b6108d2614ce1565b885160808201526020890151819060018111156108eb57fe5b908160018111156108f857fe5b9052506001600160a01b03808416602083015282811660408084019190915260808b0151606084015260a08b01516101008401528951821660c08401528901511660e082015260008061094a83611b66565b9198509250905061098160008c60200151600181111561096657fe5b146109745789831115610979565b898210155b6101fb61054b565b6109998b60400151838c600001518d60200151611c5a565b6109b18b60600151828c604001518d60600151611d38565b6109d36109c18c60400151611938565b6109cc5760006109ce565b825b6119de565b5050505050506109e1611822565b949350505050565b6109f1611768565b6109f9611829565b610a0583518351611e12565b6060835167ffffffffffffffff81118015610a1f57600080fd5b50604051908082528060200260200182016040528015610a49578160200160208202803683370190505b5090506060845167ffffffffffffffff81118015610a6657600080fd5b50604051908082528060200260200182016040528015610a90578160200160208202803683370190505b5090506000805b8651811015610c09576000878281518110610aae57fe5b602002602001015190506000878381518110610ac657fe5b60200260200101519050610b11846001600160a01b0316836001600160a01b03161160006001600160a01b0316846001600160a01b031614610b09576066610b0c565b60685b61054b565b819350816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610b409190615b63565b60206040518083038186803b158015610b5857600080fd5b505afa158015610b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b909190615968565b858481518110610b9c57fe5b602002602001018181525050610bb181611e1f565b868481518110610bbd57fe5b602002602001018181525050610beb81868581518110610bd957fe5b6020026020010151101561021061054b565b610bff6001600160a01b0383168b83611ea6565b5050600101610a97565b506040517ff04f27070000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063f04f270790610c55908990899088908a90600401615c85565b600060405180830381600087803b158015610c6f57600080fd5b505af1158015610c83573d6000803e3d6000fd5b5050505060005b8651811015610df4576000878281518110610ca157fe5b602002602001015190506000848381518110610cb957fe5b602002602001015190506000826001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610cf19190615b63565b60206040518083038186803b158015610d0957600080fd5b505afa158015610d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d419190615968565b9050610d528282101561020361054b565b60008282039050610d7b888681518110610d6857fe5b602002602001015182101561025a61054b565b610d858482611f11565b836001600160a01b03168c6001600160a01b03167f0d7d75e01ab95780d3cd1c8ec0dd6c2ce19e3a20427eec8bf53283b6fb8e95f08c8881518110610dc657fe5b602002602001015184604051610ddd929190615e4d565b60405180910390a350505050806001019050610c8a565b50505050610e00611822565b50505050565b610e0e611768565b610e16611829565b82610e2081611f33565b610e2c83518351611e12565b60005b8351811015610eca576000848281518110610e4657fe5b60200260200101519050610e7260006001600160a01b0316826001600160a01b0316141561013561054b565b838281518110610e7e57fe5b6020908102919091018101516000888152600a835260408082206001600160a01b0395861683529093529190912080546001600160a01b03191692909116919091179055600101610e2f565b506000610ed685611f64565b90506002816002811115610ee657fe5b1415610f3457610efc845160021461020c61054b565b610f2f8585600081518110610f0d57fe5b602002602001015186600181518110610f2257fe5b6020026020010151611f7e565b610f5c565b6001816002811115610f4257fe5b1415610f5257610f2f858561202a565b610f5c8585612082565b847ff5847d3f2197b16cdcd2098ec95d0905cd1abdaf415f07bb7cef2bba8ac5dec48585604051610f8e929190615bed565b60405180910390a25050610fa0611822565b505050565b610fad611768565b610fb5611829565b81610fbf81611f33565b6000610fca84611f64565b90506002816002811115610fda57fe5b141561102857610ff0835160021461020c61054b565b611023848460008151811061100157fe5b60200260200101518560018151811061101657fe5b60200260200101516120d7565b611050565b600181600281111561103657fe5b1415611046576110238484612145565b61105084846121ff565b60005b83518110156110b657600a6000868152602001908152602001600020600085838151811061107d57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055600101611053565b50837f7dcdc6d02ef40c7c1a7046a011b058bd7f988fa14e20a66344f9d4e60657d610846040516110e79190615bda565b60405180910390a25050610559611822565b60007f00000000000000000000000000000000000000000000000000000000000000008260405160200161112e929190615ac2565b604051602081830303815290604052805190602001209050919050565b610e00600185858561115c86612262565b61226e565b6001600160a01b031660009081526002602052604090205490565b6060611186611768565b61118e611829565b835161119981611b0f565b6111a8834211156101fc61054b565b6111b486518551611e12565b6111c08787878b6123f4565b91506000805b87518110156112925760008882815181106111dd57fe5b6020026020010151905060008583815181106111f557fe5b6020026020010151905061122188848151811061120e57fe5b60200260200101518213156101fb61054b565b600081131561126157885160208a015182916112409185918491611c5a565b61124983611938565b1561125b576112588582611945565b94505b50611288565b600081121561128857600081600003905061128683828c604001518d60600151611d38565b505b50506001016111c6565b5061129c816119de565b50506112a6611822565b9695505050505050565b60035461010090046001600160a01b031690565b60006112ce610526565b905090565b600080600080856112e381612683565b6000806112ef89611f64565b905060028160028111156112ff57fe5b14156113165761130f89896126a1565b9150611341565b600181600281111561132457fe5b14156113345761130f898961271b565b61133e8989612789565b91505b61134a826127a1565b9650611355826127b4565b9550611360826127ca565b6000998a52600a60209081526040808c206001600160a01b039b8c168d5290915290992054969995989796909616955050505050565b61139e611829565b610e00600085858561115c86612262565b7f000000000000000000000000000000000000000000000000000000000000000090565b6113db611768565b6113e3611829565b6113eb614d31565b60005b82518110156114e55782818151811061140357fe5b6020026020010151915060008260200151905061141f81612683565b604083015161143961143183836127d0565b61020961054b565b6000828152600a602090815260408083206001600160a01b03858116855292529091205461146c911633146101f661054b565b835160608501516000806114828487878661282c565b91509150846001600160a01b0316336001600160a01b0316877f6edcaf6241105b4c94c2efdbf3a6b12458eb3d07be3a0e81d24b13c44045fe7a85856040516114cc929190615e4d565b60405180910390a45050505050508060010190506113ee565b505061057e611822565b60006112ce61289b565b6000808261150681612683565b61150f84612938565b61151885611f64565b925092505b50915091565b60603330146115f6576000306001600160a01b0316600036604051611549929190615ada565b6000604051808303816000865af19150503d8060008114611586576040519150601f19603f3d011682016040523d82523d6000602084013e61158b565b606091505b50509050806000811461159a57fe5b60046000803e6000516001600160e01b0319167ffa61cc120000000000000000000000000000000000000000000000000000000081146115de573d6000803e3d6000fd5b50602060005260043d0380600460203e602081016000f35b6060611604858585896123f4565b9050602081510263fa61cc126020830352600482036024820181fd5b60608060008361162f81612683565b606061163a8661293e565b9095509050611648816129a0565b95979096509350505050565b61165c611768565b611664611829565b8261166e81611b0f565b6001600160a01b0384811660008181526004602090815260408083209488168084529490915290819020805460ff1916861515179055519091907f46961fdb4502b646d5095fba7600486a8ac05041d55cdf0f16ed677180b5cad8906116d5908690615d1b565b60405180910390a350610fa0611822565b60006116f28383612a4f565b90505b92915050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b61177a6002600054141561019061054b565b6002600055565b60006117986000356001600160e01b0319166110f9565b905061057e6117a78233612a7d565b61019161054b565b6040516001600160a01b038216907f94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef90600090a2600380546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6001600055565b61183c611834611aaa565b61019261054b565b565b600069ffffffffffffffffffff8216605084600281111561185b57fe5b901b17606085901b6bffffffffffffffffffffffff19161790505b9392505050565b600080600080600080600088606001519050336001600160a01b0316816001600160a01b0316146118cf57876118ba576118b5611781565b600197505b6118cf6118c78233612a4f565b6101f761054b565b885160208a015160408b01516080909b0151919b909a9992985090965090945092505050565b61190a8361190286611b41565b836000612b20565b50610e008482846000611d38565b61192b8261192586611b41565b83612b76565b610e008482856000611c5a565b6001600160a01b03161590565b60008282016116f2848210158361054b565b6119648385836000612b20565b50610e00828583612b76565b8015610e005761198b6001600160a01b038516848484612ba6565b826001600160a01b0316846001600160a01b03167f540a1a3f28340caec336c81d8d7b3df139ee5cdc1839a4f283d7ebb7eaae2d5c84846040516119d0929190615bc1565b60405180910390a350505050565b6119ed8134101561020461054b565b348190038015610559576105593382612bc7565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b8015611a4c57611a47611a3d611ac7565b421061019361054b565b611a61565b611a61611a57611aeb565b42106101a961054b565b6003805460ff19168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be6490611a9f908390615d1b565b60405180910390a150565b6000611ab4611aeb565b4211806112ce57505060035460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b336001600160a01b0382161461057e57611b27611781565b611b318133612a4f565b61057e5761057e816101f7612c41565b6000611b4c82611938565b611b5e57611b5982610548565b6116f5565b6116f5610526565b600080600080611b798560800151612938565b90506000611b8a8660800151611f64565b90506002816002811115611b9a57fe5b1415611bb157611baa8683612c75565b9450611bdc565b6001816002811115611bbf57fe5b1415611bcf57611baa8683612d25565b611bd98683612db8565b94505b611bef8660000151876060015187612ff7565b809450819550505085604001516001600160a01b031686602001516001600160a01b031687608001517f2170c741c41531aec20e7c107c24eecfdd15e69c9bb0a8dd37b1840b9e0b207b8787604051611c49929190615e4d565b60405180910390a450509193909250565b82611c6457610e00565b611c6d84611938565b15611cee57611c7f811561020261054b565b611c8e8347101561020461054b565b611c96610526565b6001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015611cd057600080fd5b505af1158015611ce4573d6000803e3d6000fd5b5050505050610e00565b6000611cf985610548565b90508115611d16576000611d108483876001612b20565b90940393505b8315611d3157611d316001600160a01b038216843087612ba6565b5050505050565b82611d4257610e00565b611d4b84611938565b15611ddb57611d5d811561020261054b565b611d65610526565b6001600160a01b0316632e1a7d4d846040518263ffffffff1660e01b8152600401611d909190615d3e565b600060405180830381600087803b158015611daa57600080fd5b505af1158015611dbe573d6000803e3d6000fd5b50611dd6925050506001600160a01b03831684612bc7565b610e00565b6000611de685610548565b90508115611dfe57611df9838286612b76565b611d31565b611d316001600160a01b0382168486611ea6565b610559818314606761054b565b600080611e2a6113af565b6001600160a01b031663d877845c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e6257600080fd5b505afa158015611e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9a9190615968565b90506118768382613025565b610fa08363a9059cbb60e01b8484604051602401611ec5929190615bc1565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152613072565b801561055957610559611f226113af565b6001600160a01b0384169083611ea6565b611f3c81612683565b61057e611f4882612938565b6001600160a01b0316336001600160a01b0316146101f561054b565b600061ffff605083901c166116f5600382106101f461054b565b611f9f816001600160a01b0316836001600160a01b0316141561020a61054b565b611fbe816001600160a01b0316836001600160a01b031610606661054b565b60008381526009602052604090208054611ffb906001600160a01b0316158015611ff3575060018201546001600160a01b0316155b61020b61054b565b80546001600160a01b039384166001600160a01b03199182161782556001909101805492909316911617905550565b6000828152600860205260408120905b8251811015610e0057600061206b84838151811061205457fe5b60200260200101518461311290919063ffffffff16565b90506120798161020a61054b565b5060010161203a565b6000828152600160205260408120905b8251811015610e005760006120c08483815181106120ac57fe5b602090810291909101015184906000613175565b90506120ce8161020a61054b565b50600101612092565b60008060006120e7868686613222565b9250925092506121116120f9846132e9565b80156121095750612109836132e9565b61020d61054b565b600095865260096020526040862080546001600160a01b031990811682556001909101805490911690559490945550505050565b6000828152600860205260408120905b8251811015610e0057600083828151811061216c57fe5b602002602001015190506121b8612109600760008881526020019081526020016000206000846001600160a01b03166001600160a01b03168152602001908152602001600020546132e9565b60008581526007602090815260408083206001600160a01b038516845290915281208190556121e7848361330b565b90506121f58161020961054b565b5050600101612155565b6000828152600160205260408120905b8251811015610e0057600083828151811061222657fe5b60200260200101519050600061223c8483613412565b905061224a612109826132e9565b6122548483613421565b50505080600101905061220f565b61226a614d5a565b5090565b612276611768565b8361228081612683565b8361228a81611b0f565b61229e836000015151846020015151611e12565b60606122ad84600001516134c3565b905060606122bb8883613552565b905060608060606122d08c8c8c8c8c896135e3565b92509250925060006122e18c611f64565b905060028160028111156122f157fe5b1415612359576123548c8760008151811061230857fe5b60200260200101518660008151811061231d57fe5b60200260200101518960018151811061233257fe5b60200260200101518860018151811061234757fe5b60200260200101516137a8565b612382565b600181600281111561236757fe5b1415612378576123548c87866137e7565b6123828c85613854565b6000808e600181111561239157fe5b1490508b6001600160a01b03168d7fe5ce249087ce04f05a957192435400fd97868dba0e6a4b4c049abf8af80dae78896123cb888661389d565b876040516123db93929190615c4c565b60405180910390a3505050505050505050611d31611822565b6060835167ffffffffffffffff8111801561240e57600080fd5b50604051908082528060200260200182016040528015612438578160200160208202803683370190505b509050612443614d84565b61244b614ce1565b60008060005b89518110156126765789818151811061246657fe5b6020026020010151945060008951866020015110801561248a575089518660400151105b905061249781606461054b565b60006124b98b8860200151815181106124ac57fe5b6020026020010151611b41565b905060006124d08c8960400151815181106124ac57fe5b90506124f3816001600160a01b0316836001600160a01b031614156101fd61054b565b60608801516125435761250b600085116101fe61054b565b60006125188b8484613945565b6001600160a01b0316876001600160a01b031614905061253a816101ff61054b565b50606088018590525b87516080880152868a600181111561255757fe5b9081600181111561256457fe5b9052506001600160a01b0380831660208901528181166040808a01919091526060808b0151908a015260808a01516101008a01528c51821660c08a01528c01511660e08801526000806125b689611b66565b919850925090506125c88c8585613967565b97506125fc6125d683613981565b8c8c60200151815181106125e657fe5b60200260200101516139b190919063ffffffff16565b8b8b602001518151811061260c57fe5b60200260200101818152505061264a61262482613981565b8c8c604001518151811061263457fe5b60200260200101516139e590919063ffffffff16565b8b8b604001518151811061265a57fe5b6020026020010181815250505050505050806001019050612451565b5050505050949350505050565b60008181526005602052604090205461057e9060ff166101f461054b565b60008060008060006126b287613a19565b945094509450945050836001600160a01b0316866001600160a01b031614156126e157829450505050506116f5565b816001600160a01b0316866001600160a01b031614156127065793506116f592505050565b6127116102096116fb565b5050505092915050565b60008281526007602090815260408083206001600160a01b03851684529091528120548161274882613a8f565b80612766575060008581526008602052604090206127669085613aa1565b9050806127815761277685612683565b6127816102096116fb565b509392505050565b60008281526001602052604081206109e18184613412565b6dffffffffffffffffffffffffffff1690565b60701c6dffffffffffffffffffffffffffff1690565b60e01c90565b6000806127dc84611f64565b905060028160028111156127ec57fe5b1415612804576127fc8484613ac2565b9150506116f5565b600181600281111561281257fe5b1415612822576127fc8484613b13565b6127fc8484613b2b565b600080600061283a86611f64565b9050600087600281111561284a57fe5b14156128665761285c86828787613b43565b9250925050612892565b600187600281111561287457fe5b14156128865761285c86828787613bbe565b61285c86828787613c3a565b94509492505050565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612908613c9d565b3060405160200161291d959493929190615df0565b60405160208183030381529060405280519060200120905090565b60601c90565b606080600061294c84611f64565b9050600281600281111561295c57fe5b14156129755761296b84613ca1565b925092505061299b565b600181600281111561298357fe5b14156129925761296b84613dd6565b61296b84613efd565b915091565b60606000825167ffffffffffffffff811180156129bc57600080fd5b506040519080825280602002602001820160405280156129e6578160200160208202803683370190505b5091506000905060005b825181101561151d576000848281518110612a0757fe5b60200260200101519050612a1a81613ff9565b848381518110612a2657fe5b602002602001018181525050612a4483612a3f836127ca565b614014565b9250506001016129f0565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6003546040517f9be2a88400000000000000000000000000000000000000000000000000000000815260009161010090046001600160a01b031690639be2a88490612ad090869086903090600401615d47565b60206040518083038186803b158015612ae857600080fd5b505afa158015612afc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f29190615478565b600080612b2d8686611a01565b9050612b468380612b3e5750848210155b61020161054b565b612b50818561402b565b9150818103612b6c878783612b6487613981565b60000361403a565b5050949350505050565b6000612b828484611a01565b90506000612b908284611945565b9050611d31858583612ba187613981565b61403a565b610e00846323b872dd60e01b858585604051602401611ec593929190615b77565b612bd6814710156101a361054b565b6000826001600160a01b031682604051612bef90610548565b60006040518083038185875af1925050503d8060008114612c2c576040519150601f19603f3d011682016040523d82523d6000602084013e612c31565b606091505b50509050610fa0816101a461054b565b6001600160a01b0382166000908152600260205260409020805460018101909155610fa0612c6f8483614095565b8361054b565b600080600080612c92866080015187602001518860400151613222565b92509250925060008087604001516001600160a01b031688602001516001600160a01b03161015612cc7575083905082612ccd565b50829050835b612cd9888884846141bb565b60408b015160208c01519199509294509092506001600160a01b03918216911610612d0d57612d0881836142d1565b612d17565b612d1782826142d1565b909255509295945050505050565b600080612d3a8460800151856020015161271b565b90506000612d508560800151866040015161271b565b9050612d5e858584846141bb565b6080880180516000908152600760208181526040808420828e01516001600160a01b03908116865290835281852098909855935183529081528282209a830151909516815298909352919096209590955550929392505050565b60808201516000908152600160209081526040822090840151829182918290612de290839061430c565b90506000612dfd88604001518461430c90919063ffffffff16565b9050811580612e0a575080155b15612e2757612e1c8860800151612683565b612e276102096116fb565b60001991820191016000612e3a8461432b565b905060608167ffffffffffffffff81118015612e5557600080fd5b50604051908082528060200260200182016040528015612e7f578160200160208202803683370190505b50600060a08c018190529091505b82811015612eff576000612ea1878361432f565b9050612eac81613ff9565b838381518110612eb857fe5b602002602001018181525050612ed58c60a00151612a3f836127ca565b60a08d015281861415612eea57809850612ef6565b84821415612ef6578097505b50600101612e8d565b506040517f01ec954a0000000000000000000000000000000000000000000000000000000081526001600160a01b038a16906301ec954a90612f4b908d90859089908990600401615e5b565b602060405180830381600087803b158015612f6557600080fd5b505af1158015612f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9d9190615968565b9750600080612fb58c600001518d606001518c612ff7565b9092509050612fc48983614345565b9850612fd08882614376565b9750612fdd87878b61438c565b612fe887868a61438c565b50505050505050505092915050565b6000808085600181111561300757fe5b141561301757508290508161301d565b50819050825b935093915050565b600082820261304984158061304257508385838161303f57fe5b04145b600361054b565b806130585760009150506116f5565b670de0b6b3a76400006000198201046001019150506116f5565b60006060836001600160a01b03168360405161308e9190615aea565b6000604051808303816000865af19150503d80600081146130cb576040519150601f19603f3d011682016040523d82523d6000602084013e6130d0565b606091505b509150915060008214156130e8573d6000803e3d6000fd5b610e0081516000148061310a57508180602001905181019061310a9190615478565b6101a261054b565b600061311e8383613aa1565b61316d57508154600180820184556000848152602080822090930180546001600160a01b0319166001600160a01b038616908117909155855490825282860190935260409020919091556116f5565b5060006116f5565b6001600160a01b03821660009081526002840160205260408120548061320257505082546040805180820182526001600160a01b03858116808352602080840187815260008781526001808c018452878220965187546001600160a01b03191696169590951786559051948401949094559482018089559083526002880190945291902091909155611876565b600019016000908152600180860160205260408220018390559050611876565b600080600080600061323487876143a4565b91509150600061324483836143d5565b60008a81526009602090815260408083208484526002019091528120805460018201549197509293509061327783613a8f565b80613286575061328682613a8f565b806132a757506132968c87613ac2565b80156132a757506132a78c86613ac2565b9050806132c2576132b78c612683565b6132c26102096116fb565b6132cc8383614408565b98506132d8838361442d565b975050505050505093509350939050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6001600160a01b03811660009081526001830160205260408120548015613408578354600019808301919081019060009087908390811061334857fe5b60009182526020909120015487546001600160a01b039091169150819088908590811061337157fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600189810190925260409020908401905586548790806133ba57fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03881682526001898101909152604082209190915594506116f59350505050565b60009150506116f5565b60006116f28383610209614444565b6001600160a01b0381166000908152600283016020526040812054801561340857835460001990810160008181526001878101602090815260408084209587018452808420865481546001600160a01b03199081166001600160a01b0392831617835588860180549387019390935588548216875260028d018086528488209a909a5588541690975584905593895593871682529390925281205590506116f5565b606080825167ffffffffffffffff811180156134de57600080fd5b50604051908082528060200260200182016040528015613508578160200160208202803683370190505b50905060005b83518110156107ff576135268482815181106124ac57fe5b82828151811061353257fe5b6001600160a01b039092166020928302919091019091015260010161350e565b60608060606135608561293e565b9150915061357082518551611e12565b613580600083511161020f61054b565b60005b82518110156135da576135d285828151811061359b57fe5b60200260200101516001600160a01b03168483815181106135b857fe5b60200260200101516001600160a01b03161461020861054b565b600101613583565b50949350505050565b60608060608060006135f4866129a0565b9150915060006136038b612938565b905060008c600181111561361357fe5b146136b657806001600160a01b03166374f3b0098c8c8c8787613634614481565b8f604001516040518863ffffffff1660e01b815260040161365b9796959493929190615d66565b600060405180830381600087803b15801561367557600080fd5b505af1158015613689573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136b19190810190615405565b61374f565b806001600160a01b031663d5c096c48c8c8c87876136d2614481565b8f604001516040518863ffffffff1660e01b81526004016136f99796959493929190615d66565b600060405180830381600087803b15801561371357600080fd5b505af1158015613727573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261374f9190810190615405565b80955081965050506137658751865186516144fb565b60008c600181111561377357fe5b1461378a576137858989898888614513565b613797565b6137978a8989888861465a565b955050505096509650969350505050565b60006137b485846143d5565b600087815260096020908152604080832084845260020190915290209091506137dd85846142d1565b9055505050505050565b60005b8251811015610e00578181815181106137ff57fe5b602002602001015160076000868152602001908152602001600020600085848151811061382857fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020556001016137ea565b6000828152600160205260408120905b8251811015610e00576138958184838151811061387d57fe5b60200260200101518461438c9092919063ffffffff16565b600101613864565b6060825167ffffffffffffffff811180156138b757600080fd5b506040519080825280602002602001820160405280156138e1578160200160208202803683370190505b50905060005b83518110156107ff57826139115783818151811061390157fe5b6020026020010151600003613926565b83818151811061391d57fe5b60200260200101515b82828151811061393257fe5b60209081029190910101526001016138e7565b60008084600181111561395457fe5b1461395f57816109e1565b509092915050565b60008084600181111561397657fe5b146107ff57826109e1565b600061226a7f800000000000000000000000000000000000000000000000000000000000000083106101a561054b565b60008282016116f28284128015906139c95750848212155b806139de57506000841280156139de57508482125b600061054b565b60008183036116f28284128015906139fd5750848213155b80613a125750600084128015613a1257508482135b600161054b565b6000818152600960205260408120805460018201546001600160a01b0391821692849290911690829081613a4d86856143d5565b6000818152600284016020526040902080546001820154919950919250613a748282614408565b9650613a80828261442d565b94505050505091939590929450565b6000613a9a826132e9565b1592915050565b6001600160a01b031660009081526001919091016020526040902054151590565b600082815260096020526040812080546001600160a01b0384811691161480613afa575060018101546001600160a01b038481169116145b80156109e1575050506001600160a01b03161515919050565b60008281526008602052604081206109e18184613aa1565b60008281526001602052604081206109e181846147d0565b6000806002856002811115613b5457fe5b1415613b6a57613b658685856147f1565b613b94565b6001856002811115613b7857fe5b1415613b8957613b658685856147ff565b613b9486858561480d565b8215613bae57613bae6001600160a01b0385163385611ea6565b5050600081900394909350915050565b6000806002856002811115613bcf57fe5b1415613be557613be086858561481b565b613c0f565b6001856002811115613bf357fe5b1415613c0457613be0868585614829565b613c0f868585614837565b8215613c2a57613c2a6001600160a01b038516333086612ba6565b5090946000869003945092505050565b6000806002856002811115613c4b57fe5b1415613c6357613c5c868585614845565b9050613c90565b6001856002811115613c7157fe5b1415613c8257613c5c868585614855565b613c8d868585614865565b90505b6000915094509492505050565b4690565b606080600080600080613cb387613a19565b92975090955093509150506001600160a01b0384161580613cdb57506001600160a01b038216155b15613d04575050604080516000808252602082019081528183019092529450925061299b915050565b60408051600280825260608201835290916020830190803683370190505095508386600081518110613d3257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508186600181518110613d6057fe5b6001600160a01b03929092166020928302919091018201526040805160028082526060820183529092909190830190803683370190505094508285600081518110613da757fe5b6020026020010181815250508085600181518110613dc157fe5b60200260200101818152505050505050915091565b60008181526008602052604090206060908190613df28161432b565b67ffffffffffffffff81118015613e0857600080fd5b50604051908082528060200260200182016040528015613e32578160200160208202803683370190505b509250825167ffffffffffffffff81118015613e4d57600080fd5b50604051908082528060200260200182016040528015613e77578160200160208202803683370190505b50915060005b8351811015613ef6576000613e928383614875565b905080858381518110613ea157fe5b6001600160a01b03928316602091820292909201810191909152600088815260078252604080822093851682529290915220548451859084908110613ee257fe5b602090810291909101015250600101613e7d565b5050915091565b60008181526001602052604090206060908190613f198161432b565b67ffffffffffffffff81118015613f2f57600080fd5b50604051908082528060200260200182016040528015613f59578160200160208202803683370190505b509250825167ffffffffffffffff81118015613f7457600080fd5b50604051908082528060200260200182016040528015613f9e578160200160208202803683370190505b50915060005b8351811015613ef657613fb782826148a2565b858381518110613fc357fe5b60200260200101858481518110613fd657fe5b60209081029190910101919091526001600160a01b039091169052600101613fa4565b6000614004826127b4565b61400d836127a1565b0192915050565b60008183101561402457816116f2565b5090919050565b600081831061402457816116f2565b6001600160a01b038085166000818152600b602090815260408083209488168084529490915290819020859055517f18e1ea4139e68413d7d08aa752e71568e36b2c5bf940893314c2c5b01eaa0c42906119d0908590615d3e565b6000806140a06148c6565b9050428110156140b45760009150506116f5565b60006140be6148d2565b9050806140d0576000925050506116f5565b6000816140db6149e3565b80516020918201206040516140f7939233918a91899101615dc4565b604051602081830303815290604052805190602001209050600061411a82614a32565b90506000806000614129614a4e565b9250925092506000600185858585604051600081526020016040526040516141549493929190615e1c565b6020604051602081039080840390855afa158015614176573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906141ac57508a6001600160a01b0316816001600160a01b0316145b9b9a5050505050505050505050565b6000806000806141ca86613ff9565b905060006141d786613ff9565b90506141ee6141e5886127ca565b612a3f886127ca565b60a08a01526040517f9d2c110c0000000000000000000000000000000000000000000000000000000081526001600160a01b03891690639d2c110c9061423c908c9086908690600401615e94565b602060405180830381600087803b15801561425657600080fd5b505af115801561426a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061428e9190615968565b92506000806142a68b600001518c6060015187612ff7565b90925090506142b58983614345565b96506142c18882614376565b9550505050509450945094915050565b6000806142e96142e0856127ca565b612a3f856127ca565b90506109e16142f7856127a1565b614300856127a1565b8363ffffffff16614a75565b6001600160a01b03166000908152600291909101602052604090205490565b5490565b6000908152600191820160205260409020015490565b60008061435b83614355866127a1565b90611945565b90506000614368856127b4565b9050436112a6838383614a83565b60008061435b83614386866127a1565b90614abc565b60009182526001928301602052604090912090910155565b600080826001600160a01b0316846001600160a01b0316106143c75782846143ca565b83835b915091509250929050565b600082826040516020016143ea929190615b06565b60405160208183030381529060405280519060200120905092915050565b60006116f2614416846127a1565b61441f846127a1565b614428866127ca565b614a83565b60006116f261443b846127b4565b61441f846127b4565b6001600160a01b038216600090815260028401602052604081205461446b8115158461054b565b614478856001830361432f565b95945050505050565b600061448b6113af565b6001600160a01b03166355c676286040518163ffffffff1660e01b815260040160206040518083038186803b1580156144c357600080fd5b505afa1580156144d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190615968565b610fa0828414801561450c57508183145b606761054b565b6060835167ffffffffffffffff8111801561452d57600080fd5b50604051908082528060200260200182016040528015614557578160200160208202803683370190505b50905060005b85515181101561465057600084828151811061457557fe5b602002602001015190506145a58760200151838151811061459257fe5b60200260200101518210156101f961054b565b6000876000015183815181106145b757fe5b602002602001015190506145d181838b8b60600151611d38565b60008584815181106145df57fe5b602002602001015190506145fb6145f583611b41565b82611f11565b61462a6146088483611945565b89868151811061461457fe5b602002602001015161437690919063ffffffff16565b85858151811061463657fe5b60200260200101818152505050505080600101905061455d565b5095945050505050565b60606000845167ffffffffffffffff8111801561467657600080fd5b506040519080825280602002602001820160405280156146a0578160200160208202803683370190505b50915060005b8651518110156147c65760008582815181106146be57fe5b602002602001015190506146ee886020015183815181106146db57fe5b60200260200101518211156101fa61054b565b60008860000151838151811061470057fe5b6020026020010151905061471a81838c8c60600151611c5a565b61472381611938565b15614735576147328483611945565b93505b600086848151811061474357fe5b602002602001015190506147596145f583611b41565b80831015614778576147738382038a868151811061461457fe5b6147a0565b6147a08184038a868151811061478a57fe5b602002602001015161434590919063ffffffff16565b8685815181106147ac57fe5b6020026020010181815250505050508060010190506146a6565b50614650816119de565b6001600160a01b031660009081526002919091016020526040902054151590565b610e008383614ad284614b0d565b610e008383614ad284614bb8565b610e008383614ad284614c13565b610e008383614c6284614b0d565b610e008383614c6284614bb8565b610e008383614c6284614c13565b60006109e18484614c8385614b0d565b60006109e18484614c8385614bb8565b60006109e18484614c8385614c13565b600082600001828154811061488657fe5b6000918252602090912001546001600160a01b03169392505050565b600090815260019182016020526040902080549101546001600160a01b0390911691565b60006112ce6000614c9d565b6000803560e01c8063b95cac28811461491a57638bdb39138114614942576352bbbe29811461496a5763945bcec981146149925763fa6e671d81146149ba57600092506149de565b7f3f7b71252bd19113ff48c19c6e004a9bcfcca320a0d74d58e85877cbd7dcae5892506149de565b7f8bbc57f66ea936902f50a71ce12b92c43f3c5340bb40c27c4e90ab84eeae335392506149de565b7fe192dcbc143b1e244ad73b813fd3c097b832ad260a157340b4e5e5beda067abe92506149de565b7f9bfc43a4d98313c6766986ffd7c916c7481566d9f224c6819af0a53388aced3a92506149de565b7fa3f865aa351e51cfeb40f5178d1564bb629fe9030b83caf6361d1baaf5b90b5a92505b505090565b60606000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505050608010156105485760803603815290565b6000614a3c61289b565b8260405160200161112e929190615b2d565b6000806000614a5d6020614c9d565b9250614a696040614c9d565b91506108416060614c9d565b60e01b60709190911b010190565b6000838301614ab1858210801590614aa957506e01000000000000000000000000000082105b61020e61054b565b614478858585614a75565b6000614acc83831115600161054b565b50900390565b600080614ae283614386866127a1565b90506000614af384614355876127b4565b90506000614b00866127ca565b90506112a6838383614a83565b6000806000806000614b1e89613a19565b9450509350935093506000836001600160a01b0316896001600160a01b03161415614b69576000614b5384898b63ffffffff16565b9050614b5f8185614ca7565b9093509050614b8b565b6000614b7983898b63ffffffff16565b9050614b858184614ca7565b90925090505b614b9583836142d1565b8555614ba18383614cc3565b600190950194909455509192505050949350505050565b600080614bc5868661271b565b90506000614bd782858763ffffffff16565b60008881526007602090815260408083206001600160a01b038b16845290915290208190559050614c088183614ca7565b979650505050505050565b600084815260016020526040812081614c2c8287613412565b90506000614c3e82868863ffffffff16565b9050614c4b838883613175565b50614c568183614ca7565b98975050505050505050565b600080614c7283614355866127a1565b90506000614af384614386876127b4565b600080614c8f846127a1565b905043614478828583614a83565b3601607f19013590565b6000614cb2826127b4565b614cbb846127b4565b039392505050565b60006116f2614cd1846127b4565b614cda846127b4565b6000614a75565b60408051610120810190915280600081526000602082018190526040820181905260608083018290526080830182905260a0830182905260c0830182905260e08301919091526101009091015290565b604080516080810190915280600081526000602082018190526040820181905260609091015290565b60405180608001604052806060815260200160608152602001606081526020016000151581525090565b6040518060a0016040528060008019168152602001600081526020016000815260200160008152602001606081525090565b80356116f581615f5a565b600082601f830112614dd1578081fd5b8135614de4614ddf82615f04565b615edd565b818152915060208083019084810181840286018201871015614e0557600080fd5b60005b84811015614e2d578135614e1b81615f5a565b84529282019290820190600101614e08565b505050505092915050565b600082601f830112614e48578081fd5b8135614e56614ddf82615f04565b818152915060208083019084810160005b84811015614e2d578135870160a080601f19838c03011215614e8857600080fd5b614e9181615edd565b85830135815260408084013587830152606080850135828401526080915081850135818401525082840135925067ffffffffffffffff831115614ed357600080fd5b614ee18c8885870101614fc0565b90820152865250509282019290820190600101614e67565b600082601f830112614f09578081fd5b8135614f17614ddf82615f04565b818152915060208083019084810181840286018201871015614f3857600080fd5b60005b84811015614e2d57813584529282019290820190600101614f3b565b600082601f830112614f67578081fd5b8151614f75614ddf82615f04565b818152915060208083019084810181840286018201871015614f9657600080fd5b60005b84811015614e2d57815184529282019290820190600101614f99565b80356116f581615f6f565b600082601f830112614fd0578081fd5b813567ffffffffffffffff811115614fe6578182fd5b614ff9601f8201601f1916602001615edd565b915080825283602082850101111561501057600080fd5b8060208401602084013760009082016020015292915050565b80356116f581615f7d565b8035600281106116f557600080fd5b8035600481106116f557600080fd5b600060808284031215615063578081fd5b61506d6080615edd565b9050813567ffffffffffffffff8082111561508757600080fd5b61509385838601614dc1565b835260208401359150808211156150a957600080fd5b6150b585838601614ef9565b602084015260408401359150808211156150ce57600080fd5b506150db84828501614fc0565b6040830152506150ee8360608401614fb5565b606082015292915050565b60006080828403121561510a578081fd5b6151146080615edd565b9050813561512181615f5a565b8152602082013561513181615f6f565b6020820152604082013561514481615f5a565b604082015260608201356150ee81615f6f565b600060208284031215615168578081fd5b81356116f281615f5a565b60008060408385031215615185578081fd5b823561519081615f5a565b915060208301356151a081615f5a565b809150509250929050565b6000806000606084860312156151bf578081fd5b83356151ca81615f5a565b925060208401356151da81615f5a565b915060408401356151ea81615f6f565b809150509250925092565b60008060408385031215615207578182fd5b823561521281615f5a565b9150602083013567ffffffffffffffff81111561522d578182fd5b61523985828601614dc1565b9150509250929050565b60006020808385031215615255578182fd5b823567ffffffffffffffff81111561526b578283fd5b8301601f8101851361527b578283fd5b8035615289614ddf82615f04565b818152838101908385016080808502860187018a10156152a7578788fd5b8795505b848610156153105780828b0312156152c1578788fd5b6152ca81615edd565b6152d48b84615029565b8152878301358882015260406152ec8c828601614db6565b908201526060838101359082015284526001959095019492860192908101906152ab565b509098975050505050505050565b60006020808385031215615330578182fd5b823567ffffffffffffffff811115615346578283fd5b8301601f81018513615356578283fd5b8035615364614ddf82615f04565b8181528381019083850160a0808502860187018a1015615382578788fd5b8795505b848610156153105780828b03121561539c578788fd5b6153a581615edd565b6153af8b84615043565b81526153bd8b898501614db6565b818901526040838101359082015260606153d98c828601614db6565b9082015260806153eb8c858301614db6565b908201528452600195909501949286019290810190615386565b60008060408385031215615417578182fd5b825167ffffffffffffffff8082111561542e578384fd5b61543a86838701614f57565b9350602085015191508082111561544f578283fd5b5061523985828601614f57565b60006020828403121561546d578081fd5b81356116f281615f6f565b600060208284031215615489578081fd5b81516116f281615f6f565b6000602082840312156154a5578081fd5b5035919050565b600080600080608085870312156154c1578182fd5b8435935060208501356154d381615f5a565b925060408501356154e381615f5a565b9150606085013567ffffffffffffffff8111156154fe578182fd5b61550a87828801615052565b91505092959194509250565b60008060408385031215615528578182fd5b82359150602083013567ffffffffffffffff81111561522d578182fd5b600080600060608486031215615559578081fd5b8335925060208085013567ffffffffffffffff80821115615578578384fd5b61558488838901614dc1565b94506040870135915080821115615599578384fd5b508501601f810187136155aa578283fd5b80356155b8614ddf82615f04565b81815283810190838501858402850186018b10156155d4578687fd5b8694505b838510156155ff5780356155eb81615f5a565b8352600194909401939185019185016155d8565b5080955050505050509250925092565b60008060408385031215615621578182fd5b8235915060208301356151a081615f5a565b600060208284031215615644578081fd5b81356001600160e01b0319811681146116f2578182fd5b60008060008060808587031215615670578182fd5b843561567b81615f5a565b9350602085013567ffffffffffffffff80821115615697578384fd5b6156a388838901614dc1565b945060408701359150808211156156b8578384fd5b6156c488838901614ef9565b935060608701359150808211156156d9578283fd5b5061550a87828801614fc0565b6000602082840312156156f7578081fd5b81356116f281615f7d565b60008060008060e08587031215615717578182fd5b6157218686615034565b9350602085013567ffffffffffffffff8082111561573d578384fd5b61574988838901614e38565b9450604087013591508082111561575e578384fd5b5061576b87828801614dc1565b92505061577b86606087016150f9565b905092959194509250565b600080600080600080610120878903121561579f578384fd5b6157a98888615034565b955060208088013567ffffffffffffffff808211156157c6578687fd5b6157d28b838c01614e38565b975060408a01359150808211156157e7578687fd5b6157f38b838c01614dc1565b96506158028b60608c016150f9565b955060e08a0135915080821115615817578485fd5b508801601f81018a13615828578384fd5b8035615836614ddf82615f04565b81815283810190838501858402850186018e1015615852578788fd5b8794505b83851015615874578035835260019490940193918501918501615856565b50809650505050505061010087013590509295509295509295565b60008060008060e085870312156158a4578182fd5b843567ffffffffffffffff808211156158bb578384fd5b9086019060c082890312156158ce578384fd5b6158d860c0615edd565b823581526158e98960208501615034565b602082015260408301356158fc81615f5a565b604082015261590e8960608501614db6565b60608201526080830135608082015260a08301358281111561592e578586fd5b61593a8a828601614fc0565b60a08301525080965050505061595386602087016150f9565b939693955050505060a08201359160c0013590565b600060208284031215615979578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156159c55781516001600160a01b0316875295820195908201906001016159a0565b509495945050505050565b6000815180845260208085019450808401835b838110156159c5578151875295820195908201906001016159e3565b60008151808452615a17816020860160208601615f24565b601f01601f19169290920160200192915050565b6000610120825160028110615a3c57fe5b808552506020830151615a526020860182615980565b506040830151615a656040860182615980565b50606083015160608501526080830151608085015260a083015160a085015260c0830151615a9660c0860182615980565b5060e0830151615aa960e0860182615980565b506101008084015182828701526112a6838701826159ff565b9182526001600160e01b031916602082015260240190565b6000828483379101908152919050565b60008251615afc818460208701615f24565b9190910192915050565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038316815260408101615bb483615f50565b8260208301529392505050565b6001600160a01b03929092168252602082015260400190565b6000602082526116f2602083018461598d565b600060408252615c00604083018561598d565b828103602084810191909152845180835285820192820190845b81811015615c3f5784516001600160a01b031683529383019391830191600101615c1a565b5090979650505050505050565b600060608252615c5f606083018661598d565b8281036020840152615c7181866159d0565b905082810360408401526112a681856159d0565b600060808252615c98608083018761598d565b8281036020840152615caa81876159d0565b90508281036040840152615cbe81866159d0565b90508281036060840152614c0881856159ff565b600060608252615ce5606083018661598d565b8281036020840152615cf781866159d0565b915050826040830152949350505050565b6000602082526116f260208301846159d0565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b60008882526001600160a01b03808916602084015280881660408401525060e06060830152615d9860e08301876159d0565b8560808401528460a084015282810360c0840152615db681856159ff565b9a9950505050505050505050565b94855260208501939093526001600160a01b039190911660408401526060830152608082015260a00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b60208101615e4783615f50565b91905290565b918252602082015260400190565b600060808252615e6e6080830187615a2b565b8281036020840152615e8081876159d0565b604084019590955250506060015292915050565b600060608252615ea76060830186615a2b565b60208301949094525060400152919050565b938452602084019290925260408301526001600160a01b0316606082015260800190565b60405181810167ffffffffffffffff81118282101715615efc57600080fd5b604052919050565b600067ffffffffffffffff821115615f1a578081fd5b5060209081020190565b60005b83811015615f3f578181015183820152602001615f27565b83811115610e005750506000910152565b6003811061057e57fe5b6001600160a01b038116811461057e57600080fd5b801515811461057e57600080fd5b6003811061057e57600080fdfea2646970667358221220201e4f926e390fed8dd5318c58846af735c2bebc61b80693ae936a5fe76dcf1464736f6c6343000701003360c060405234801561001057600080fd5b50604051610be6380380610be683398101604081905261002f9161004d565b30608052600160005560601b6001600160601b03191660a05261007b565b60006020828403121561005e578081fd5b81516001600160a01b0381168114610074578182fd5b9392505050565b60805160a05160601c610b406100a66000398061041352806105495250806102a75250610b406000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063851c1bb311610076578063d877845c1161005b578063d877845c14610129578063e42abf3514610131578063fbfa77cf14610151576100a3565b8063851c1bb314610101578063aaabadc514610114576100a3565b806338e9922e146100a857806355c67628146100bd5780636b6b9f69146100db5780636daefab6146100ee575b600080fd5b6100bb6100b636600461099c565b610159565b005b6100c56101b8565b6040516100d29190610aa6565b60405180910390f35b6100bb6100e936600461099c565b6101be565b6100bb6100fc3660046107d1565b610211565b6100c561010f366004610924565b6102a3565b61011c6102f5565b6040516100d29190610a35565b6100c5610304565b61014461013f366004610852565b61030a565b6040516100d29190610a62565b61011c610411565b610161610435565b6101786706f05b59d3b2000082111561025861047e565b60018190556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906101ad908390610aa6565b60405180910390a150565b60015490565b6101c6610435565b6101dc662386f26fc1000082111561025961047e565b60028190556040517f5a0b7386237e7f07fa741efc64e59c9387d2cccafec760efed4d53387f20e19a906101ad908390610aa6565b610219610490565b610221610435565b61022b84836104a9565b60005b8481101561029357600086868381811061024457fe5b90506020020160208101906102599190610980565b9050600085858481811061026957fe5b6020029190910135915061028990506001600160a01b03831685836104b6565b505060010161022e565b5061029c61053e565b5050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016102d89291906109cc565b604051602081830303815290604052805190602001209050919050565b60006102ff610545565b905090565b60025490565b6060815167ffffffffffffffff8111801561032457600080fd5b5060405190808252806020026020018201604052801561034e578160200160208202803683370190505b50905060005b825181101561040b5782818151811061036957fe5b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161039c9190610a35565b60206040518083038186803b1580156103b457600080fd5b505afa1580156103c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ec91906109b4565b8282815181106103f857fe5b6020908102919091010152600101610354565b50919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006104646000357fffffffff00000000000000000000000000000000000000000000000000000000166102a3565b905061047b61047382336105d8565b61019161047e565b50565b8161048c5761048c8161066a565b5050565b6104a26002600054141561019061047e565b6002600055565b61048c818314606761047e565b6105398363a9059cbb60e01b84846040516024016104d5929190610a49565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526106d7565b505050565b6001600055565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a057600080fd5b505afa1580156105b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ff9190610964565b60006105e2610545565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b815260040161061193929190610aaf565b60206040518083038186803b15801561062957600080fd5b505afa15801561063d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066191906108fd565b90505b92915050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b60006060836001600160a01b0316836040516106f391906109fc565b6000604051808303816000865af19150503d8060008114610730576040519150601f19603f3d011682016040523d82523d6000602084013e610735565b606091505b5091509150600082141561074d573d6000803e3d6000fd5b61077781516000148061076f57508180602001905181019061076f91906108fd565b6101a261047e565b50505050565b60008083601f84011261078e578182fd5b50813567ffffffffffffffff8111156107a5578182fd5b60208301915083602080830285010111156107bf57600080fd5b9250929050565b803561066481610af5565b6000806000806000606086880312156107e8578081fd5b853567ffffffffffffffff808211156107ff578283fd5b61080b89838a0161077d565b90975095506020880135915080821115610823578283fd5b506108308882890161077d565b909450925050604086013561084481610af5565b809150509295509295909350565b60006020808385031215610864578182fd5b823567ffffffffffffffff8082111561087b578384fd5b818501915085601f83011261088e578384fd5b81358181111561089c578485fd5b83810291506108ac848301610ace565b8181528481019084860184860187018a10156108c6578788fd5b8795505b838610156108f0576108dc8a826107c6565b8352600195909501949186019186016108ca565b5098975050505050505050565b60006020828403121561090e578081fd5b8151801515811461091d578182fd5b9392505050565b600060208284031215610935578081fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461091d578182fd5b600060208284031215610975578081fd5b815161091d81610af5565b600060208284031215610991578081fd5b813561091d81610af5565b6000602082840312156109ad578081fd5b5035919050565b6000602082840312156109c5578081fd5b5051919050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b60008251815b81811015610a1c5760208186018101518583015201610a02565b81811115610a2a5782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015610a9a57835183529284019291840191600101610a7e565b50909695505050505050565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b60405181810167ffffffffffffffff81118282101715610aed57600080fd5b604052919050565b6001600160a01b038116811461047b57600080fdfea2646970667358221220be72bdf8e7a3c38606c5f954fbe2d77798347aaa1cfb76fe77ec2f6c245d24bc64736f6c63430007010033",
+ "_disabled": [
{
- "inputs": [],
- "name": "getDomainSeparator",
- "outputs": [
+ "inputs": [
{
"internalType": "bytes32",
- "name": "",
+ "name": "poolId",
"type": "bytes32"
+ },
+ {
+ "internalType": "contract IERC20[]",
+ "name": "tokens",
+ "type": "address[]"
}
],
- "stateMutability": "view",
+ "name": "deregisterTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "poolId",
+ "type": "bytes32"
+ },
{
"internalType": "address",
- "name": "user",
+ "name": "sender",
"type": "address"
},
{
- "internalType": "contract IERC20[]",
- "name": "tokens",
- "type": "address[]"
- }
- ],
- "name": "getInternalBalance",
- "outputs": [
+ "internalType": "address payable",
+ "name": "recipient",
+ "type": "address"
+ },
{
- "internalType": "uint256[]",
- "name": "balances",
- "type": "uint256[]"
+ "components": [
+ {
+ "internalType": "contract IAsset[]",
+ "name": "assets",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "minAmountsOut",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes",
+ "name": "userData",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bool",
+ "name": "toInternalBalance",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct IVault.ExitPoolRequest",
+ "name": "request",
+ "type": "tuple"
}
],
- "stateMutability": "view",
+ "name": "exitPool",
+ "outputs": [],
+ "stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
- "internalType": "address",
- "name": "user",
- "type": "address"
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4"
}
],
- "name": "getNextNonce",
+ "name": "getActionId",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "bytes32",
"name": "",
- "type": "uint256"
+ "type": "bytes32"
}
],
"stateMutability": "view",
@@ -636,46 +849,44 @@
},
{
"inputs": [],
- "name": "getPausedState",
+ "name": "getAuthorizer",
"outputs": [
{
- "internalType": "bool",
- "name": "paused",
- "type": "bool"
- },
- {
- "internalType": "uint256",
- "name": "pauseWindowEndTime",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "bufferPeriodEndTime",
- "type": "uint256"
+ "internalType": "contract IAuthorizer",
+ "name": "",
+ "type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [
+ "inputs": [],
+ "name": "getDomainSeparator",
+ "outputs": [
{
"internalType": "bytes32",
- "name": "poolId",
+ "name": "",
"type": "bytes32"
}
],
- "name": "getPool",
- "outputs": [
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
{
"internalType": "address",
- "name": "",
+ "name": "user",
"type": "address"
- },
+ }
+ ],
+ "name": "getNextNonce",
+ "outputs": [
{
- "internalType": "enum IVault.PoolSpecialization",
+ "internalType": "uint256",
"name": "",
- "type": "uint8"
+ "type": "uint256"
}
],
"stateMutability": "view",
@@ -720,35 +931,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "poolId",
- "type": "bytes32"
- }
- ],
- "name": "getPoolTokens",
- "outputs": [
- {
- "internalType": "contract IERC20[]",
- "name": "tokens",
- "type": "address[]"
- },
- {
- "internalType": "uint256[]",
- "name": "balances",
- "type": "uint256[]"
- },
- {
- "internalType": "uint256",
- "name": "lastChangeBlock",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [],
"name": "getProtocolFeesCollector",
@@ -762,30 +944,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "user",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "relayer",
- "type": "address"
- }
- ],
- "name": "hasApprovedRelayer",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -871,46 +1029,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "enum IVault.UserBalanceOpKind",
- "name": "kind",
- "type": "uint8"
- },
- {
- "internalType": "contract IAsset",
- "name": "asset",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address payable",
- "name": "recipient",
- "type": "address"
- }
- ],
- "internalType": "struct IVault.UserBalanceOp[]",
- "name": "ops",
- "type": "tuple[]"
- }
- ],
- "name": "manageUserBalance",
- "outputs": [],
- "stateMutability": "payable",
- "type": "function"
- },
{
"inputs": [
{
@@ -1061,122 +1179,6 @@
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "relayer",
- "type": "address"
- },
- {
- "internalType": "bool",
- "name": "approved",
- "type": "bool"
- }
- ],
- "name": "setRelayerApproval",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "bytes32",
- "name": "poolId",
- "type": "bytes32"
- },
- {
- "internalType": "enum IVault.SwapKind",
- "name": "kind",
- "type": "uint8"
- },
- {
- "internalType": "contract IAsset",
- "name": "assetIn",
- "type": "address"
- },
- {
- "internalType": "contract IAsset",
- "name": "assetOut",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "userData",
- "type": "bytes"
- }
- ],
- "internalType": "struct IVault.SingleSwap",
- "name": "singleSwap",
- "type": "tuple"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "bool",
- "name": "fromInternalBalance",
- "type": "bool"
- },
- {
- "internalType": "address payable",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "bool",
- "name": "toInternalBalance",
- "type": "bool"
- }
- ],
- "internalType": "struct IVault.FundManagement",
- "name": "funds",
- "type": "tuple"
- },
- {
- "internalType": "uint256",
- "name": "limit",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "deadline",
- "type": "uint256"
- }
- ],
- "name": "swap",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "amountCalculated",
- "type": "uint256"
- }
- ],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "stateMutability": "payable",
- "type": "receive"
}
- ],
- "bytecode": "0x6101806040523480156200001257600080fd5b5060405162006ed638038062006ed6833981016040819052620000359162000253565b8382826040518060400160405280601181526020017010985b185b98d95c88158c8815985d5b1d607a1b81525080604051806040016040528060018152602001603160f81b815250306001600160a01b031660001b89806001600160a01b03166080816001600160a01b031660601b815250505030604051620000b89062000245565b620000c491906200029f565b604051809103906000f080158015620000e1573d6000803e3d6000fd5b5060601b6001600160601b03191660a052600160005560c052815160209283012060e052805191012061010052507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61012052620001486276a70083111561019462000181565b6200015c62278d0082111561019562000181565b429091016101408190520161016052620001768162000196565b5050505050620002cc565b8162000192576200019281620001f2565b5050565b6040516001600160a01b038216907f94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef90600090a2600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b610be680620062f083390190565b6000806000806080858703121562000269578384fd5b84516200027681620002b3565b60208601519094506200028981620002b3565b6040860151606090960151949790965092505050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114620002c957600080fd5b50565b60805160601c60a05160601c60c05160e05161010051610120516101405161016051615fc06200033060003980611aed525080611ac952508061289f5250806128e15250806128c05250806110fd5250806113b15250806105285250615fc06000f3fe6080604052600436106101a55760003560e01c8063945bcec9116100e1578063e6c460921161008a578063f84d066e11610064578063f84d066e1461048a578063f94d4668146104aa578063fa6e671d146104d9578063fec90d72146104f9576101d3565b8063e6c4609214610427578063ed24911d14610447578063f6c009271461045c576101d3565b8063b05f8e48116100bb578063b05f8e48146103cf578063b95cac28146103ff578063d2946c2b14610412576101d3565b8063945bcec914610385578063aaabadc514610398578063ad5c4648146103ba576101d3565b806352bbbe291161014e5780637d3aeb96116101285780637d3aeb9614610305578063851c1bb3146103255780638bdb39131461034557806390193b7c14610365576101d3565b806352bbbe29146102b25780635c38449e146102c557806366a9c7d2146102e5576101d3565b80630f5a6efa1161017f5780630f5a6efa1461024157806316c38b3c1461026e5780631c0de0511461028e576101d3565b8063058a628f146101d857806309b2760f146101f85780630e8e3e841461022e576101d3565b366101d3576101d16101b5610526565b6001600160a01b0316336001600160a01b03161461020661054b565b005b600080fd5b3480156101e457600080fd5b506101d16101f3366004615157565b61055d565b34801561020457600080fd5b506102186102133660046156e6565b610581565b6040516102259190615d3e565b60405180910390f35b6101d161023c36600461531e565b610634565b34801561024d57600080fd5b5061026161025c3660046151f5565b610770565b6040516102259190615d08565b34801561027a57600080fd5b506101d161028936600461545c565b610806565b34801561029a57600080fd5b506102a361081f565b60405161022593929190615d26565b6102186102c036600461588f565b610848565b3480156102d157600080fd5b506101d16102e036600461565b565b6109e9565b3480156102f157600080fd5b506101d1610300366004615545565b610e06565b34801561031157600080fd5b506101d1610320366004615516565b610fa5565b34801561033157600080fd5b50610218610340366004615633565b6110f9565b34801561035157600080fd5b506101d16103603660046154ac565b61114b565b34801561037157600080fd5b50610218610380366004615157565b611161565b610261610393366004615786565b61117c565b3480156103a457600080fd5b506103ad6112b0565b6040516102259190615b63565b3480156103c657600080fd5b506103ad6112c4565b3480156103db57600080fd5b506103ef6103ea36600461560f565b6112d3565b6040516102259493929190615eb9565b6101d161040d3660046154ac565b611396565b34801561041e57600080fd5b506103ad6113af565b34801561043357600080fd5b506101d1610442366004615243565b6113d3565b34801561045357600080fd5b506102186114ef565b34801561046857600080fd5b5061047c610477366004615494565b6114f9565b604051610225929190615b9b565b34801561049657600080fd5b506102616104a5366004615702565b611523565b3480156104b657600080fd5b506104ca6104c5366004615494565b611620565b60405161022593929190615cd2565b3480156104e557600080fd5b506101d16104f43660046151ab565b611654565b34801561050557600080fd5b50610519610514366004615173565b6116e6565b6040516102259190615d1b565b7f00000000000000000000000000000000000000000000000000000000000000005b90565b8161055957610559816116fb565b5050565b610565611768565b61056d611781565b610576816117af565b61057e611822565b50565b600061058b611768565b610593611829565b60006105a2338460065461183e565b6000818152600560205260409020549091506105c49060ff16156101f461054b565b60008181526005602052604090819020805460ff1916600190811790915560068054909101905551339082907f3c13bc30b8e878c53fd2a36b679409c073afd75950be43d8858768e956fbc20e9061061d908790615e3a565b60405180910390a3905061062f611822565b919050565b61063c611768565b6000806000805b845181101561075b5760008060008060006106718a878151811061066357fe5b60200260200101518961187d565b9c50939850919650945092509050600185600381111561068d57fe5b14156106a45761069f848383866118f5565b61074a565b866106b6576106b1611829565b600196505b60008560038111156106c457fe5b14156106f5576106d684838386611918565b6106df84611938565b1561069f576106ee8984611945565b985061074a565b61070a61070185611938565b1561020761054b565b600061071585610548565b9050600286600381111561072557fe5b141561073c5761073781848487611957565b610748565b61074881848487611970565b505b505060019093019250610643915050565b50610765836119de565b50505061057e611822565b6060815167ffffffffffffffff8111801561078a57600080fd5b506040519080825280602002602001820160405280156107b4578160200160208202803683370190505b50905060005b82518110156107ff576107e0848483815181106107d357fe5b6020026020010151611a01565b8282815181106107ec57fe5b60209081029190910101526001016107ba565b5092915050565b61080e611768565b610816611781565b61057681611a2c565b600080600061082c611aaa565b159250610837611ac7565b9150610841611aeb565b9050909192565b6000610852611768565b61085a611829565b835161086581611b0f565b610874834211156101fc61054b565b61088760008760800151116101fe61054b565b60006108968760400151611b41565b905060006108a78860600151611b41565b90506108ca816001600160a01b0316836001600160a01b031614156101fd61054b565b6108d2614ce1565b885160808201526020890151819060018111156108eb57fe5b908160018111156108f857fe5b9052506001600160a01b03808416602083015282811660408084019190915260808b0151606084015260a08b01516101008401528951821660c08401528901511660e082015260008061094a83611b66565b9198509250905061098160008c60200151600181111561096657fe5b146109745789831115610979565b898210155b6101fb61054b565b6109998b60400151838c600001518d60200151611c5a565b6109b18b60600151828c604001518d60600151611d38565b6109d36109c18c60400151611938565b6109cc5760006109ce565b825b6119de565b5050505050506109e1611822565b949350505050565b6109f1611768565b6109f9611829565b610a0583518351611e12565b6060835167ffffffffffffffff81118015610a1f57600080fd5b50604051908082528060200260200182016040528015610a49578160200160208202803683370190505b5090506060845167ffffffffffffffff81118015610a6657600080fd5b50604051908082528060200260200182016040528015610a90578160200160208202803683370190505b5090506000805b8651811015610c09576000878281518110610aae57fe5b602002602001015190506000878381518110610ac657fe5b60200260200101519050610b11846001600160a01b0316836001600160a01b03161160006001600160a01b0316846001600160a01b031614610b09576066610b0c565b60685b61054b565b819350816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610b409190615b63565b60206040518083038186803b158015610b5857600080fd5b505afa158015610b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b909190615968565b858481518110610b9c57fe5b602002602001018181525050610bb181611e1f565b868481518110610bbd57fe5b602002602001018181525050610beb81868581518110610bd957fe5b6020026020010151101561021061054b565b610bff6001600160a01b0383168b83611ea6565b5050600101610a97565b506040517ff04f27070000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063f04f270790610c55908990899088908a90600401615c85565b600060405180830381600087803b158015610c6f57600080fd5b505af1158015610c83573d6000803e3d6000fd5b5050505060005b8651811015610df4576000878281518110610ca157fe5b602002602001015190506000848381518110610cb957fe5b602002602001015190506000826001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610cf19190615b63565b60206040518083038186803b158015610d0957600080fd5b505afa158015610d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d419190615968565b9050610d528282101561020361054b565b60008282039050610d7b888681518110610d6857fe5b602002602001015182101561025a61054b565b610d858482611f11565b836001600160a01b03168c6001600160a01b03167f0d7d75e01ab95780d3cd1c8ec0dd6c2ce19e3a20427eec8bf53283b6fb8e95f08c8881518110610dc657fe5b602002602001015184604051610ddd929190615e4d565b60405180910390a350505050806001019050610c8a565b50505050610e00611822565b50505050565b610e0e611768565b610e16611829565b82610e2081611f33565b610e2c83518351611e12565b60005b8351811015610eca576000848281518110610e4657fe5b60200260200101519050610e7260006001600160a01b0316826001600160a01b0316141561013561054b565b838281518110610e7e57fe5b6020908102919091018101516000888152600a835260408082206001600160a01b0395861683529093529190912080546001600160a01b03191692909116919091179055600101610e2f565b506000610ed685611f64565b90506002816002811115610ee657fe5b1415610f3457610efc845160021461020c61054b565b610f2f8585600081518110610f0d57fe5b602002602001015186600181518110610f2257fe5b6020026020010151611f7e565b610f5c565b6001816002811115610f4257fe5b1415610f5257610f2f858561202a565b610f5c8585612082565b847ff5847d3f2197b16cdcd2098ec95d0905cd1abdaf415f07bb7cef2bba8ac5dec48585604051610f8e929190615bed565b60405180910390a25050610fa0611822565b505050565b610fad611768565b610fb5611829565b81610fbf81611f33565b6000610fca84611f64565b90506002816002811115610fda57fe5b141561102857610ff0835160021461020c61054b565b611023848460008151811061100157fe5b60200260200101518560018151811061101657fe5b60200260200101516120d7565b611050565b600181600281111561103657fe5b1415611046576110238484612145565b61105084846121ff565b60005b83518110156110b657600a6000868152602001908152602001600020600085838151811061107d57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002080546001600160a01b0319169055600101611053565b50837f7dcdc6d02ef40c7c1a7046a011b058bd7f988fa14e20a66344f9d4e60657d610846040516110e79190615bda565b60405180910390a25050610559611822565b60007f00000000000000000000000000000000000000000000000000000000000000008260405160200161112e929190615ac2565b604051602081830303815290604052805190602001209050919050565b610e00600185858561115c86612262565b61226e565b6001600160a01b031660009081526002602052604090205490565b6060611186611768565b61118e611829565b835161119981611b0f565b6111a8834211156101fc61054b565b6111b486518551611e12565b6111c08787878b6123f4565b91506000805b87518110156112925760008882815181106111dd57fe5b6020026020010151905060008583815181106111f557fe5b6020026020010151905061122188848151811061120e57fe5b60200260200101518213156101fb61054b565b600081131561126157885160208a015182916112409185918491611c5a565b61124983611938565b1561125b576112588582611945565b94505b50611288565b600081121561128857600081600003905061128683828c604001518d60600151611d38565b505b50506001016111c6565b5061129c816119de565b50506112a6611822565b9695505050505050565b60035461010090046001600160a01b031690565b60006112ce610526565b905090565b600080600080856112e381612683565b6000806112ef89611f64565b905060028160028111156112ff57fe5b14156113165761130f89896126a1565b9150611341565b600181600281111561132457fe5b14156113345761130f898961271b565b61133e8989612789565b91505b61134a826127a1565b9650611355826127b4565b9550611360826127ca565b6000998a52600a60209081526040808c206001600160a01b039b8c168d5290915290992054969995989796909616955050505050565b61139e611829565b610e00600085858561115c86612262565b7f000000000000000000000000000000000000000000000000000000000000000090565b6113db611768565b6113e3611829565b6113eb614d31565b60005b82518110156114e55782818151811061140357fe5b6020026020010151915060008260200151905061141f81612683565b604083015161143961143183836127d0565b61020961054b565b6000828152600a602090815260408083206001600160a01b03858116855292529091205461146c911633146101f661054b565b835160608501516000806114828487878661282c565b91509150846001600160a01b0316336001600160a01b0316877f6edcaf6241105b4c94c2efdbf3a6b12458eb3d07be3a0e81d24b13c44045fe7a85856040516114cc929190615e4d565b60405180910390a45050505050508060010190506113ee565b505061057e611822565b60006112ce61289b565b6000808261150681612683565b61150f84612938565b61151885611f64565b925092505b50915091565b60603330146115f6576000306001600160a01b0316600036604051611549929190615ada565b6000604051808303816000865af19150503d8060008114611586576040519150601f19603f3d011682016040523d82523d6000602084013e61158b565b606091505b50509050806000811461159a57fe5b60046000803e6000516001600160e01b0319167ffa61cc120000000000000000000000000000000000000000000000000000000081146115de573d6000803e3d6000fd5b50602060005260043d0380600460203e602081016000f35b6060611604858585896123f4565b9050602081510263fa61cc126020830352600482036024820181fd5b60608060008361162f81612683565b606061163a8661293e565b9095509050611648816129a0565b95979096509350505050565b61165c611768565b611664611829565b8261166e81611b0f565b6001600160a01b0384811660008181526004602090815260408083209488168084529490915290819020805460ff1916861515179055519091907f46961fdb4502b646d5095fba7600486a8ac05041d55cdf0f16ed677180b5cad8906116d5908690615d1b565b60405180910390a350610fa0611822565b60006116f28383612a4f565b90505b92915050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b61177a6002600054141561019061054b565b6002600055565b60006117986000356001600160e01b0319166110f9565b905061057e6117a78233612a7d565b61019161054b565b6040516001600160a01b038216907f94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef90600090a2600380546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6001600055565b61183c611834611aaa565b61019261054b565b565b600069ffffffffffffffffffff8216605084600281111561185b57fe5b901b17606085901b6bffffffffffffffffffffffff19161790505b9392505050565b600080600080600080600088606001519050336001600160a01b0316816001600160a01b0316146118cf57876118ba576118b5611781565b600197505b6118cf6118c78233612a4f565b6101f761054b565b885160208a015160408b01516080909b0151919b909a9992985090965090945092505050565b61190a8361190286611b41565b836000612b20565b50610e008482846000611d38565b61192b8261192586611b41565b83612b76565b610e008482856000611c5a565b6001600160a01b03161590565b60008282016116f2848210158361054b565b6119648385836000612b20565b50610e00828583612b76565b8015610e005761198b6001600160a01b038516848484612ba6565b826001600160a01b0316846001600160a01b03167f540a1a3f28340caec336c81d8d7b3df139ee5cdc1839a4f283d7ebb7eaae2d5c84846040516119d0929190615bc1565b60405180910390a350505050565b6119ed8134101561020461054b565b348190038015610559576105593382612bc7565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b8015611a4c57611a47611a3d611ac7565b421061019361054b565b611a61565b611a61611a57611aeb565b42106101a961054b565b6003805460ff19168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be6490611a9f908390615d1b565b60405180910390a150565b6000611ab4611aeb565b4211806112ce57505060035460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b336001600160a01b0382161461057e57611b27611781565b611b318133612a4f565b61057e5761057e816101f7612c41565b6000611b4c82611938565b611b5e57611b5982610548565b6116f5565b6116f5610526565b600080600080611b798560800151612938565b90506000611b8a8660800151611f64565b90506002816002811115611b9a57fe5b1415611bb157611baa8683612c75565b9450611bdc565b6001816002811115611bbf57fe5b1415611bcf57611baa8683612d25565b611bd98683612db8565b94505b611bef8660000151876060015187612ff7565b809450819550505085604001516001600160a01b031686602001516001600160a01b031687608001517f2170c741c41531aec20e7c107c24eecfdd15e69c9bb0a8dd37b1840b9e0b207b8787604051611c49929190615e4d565b60405180910390a450509193909250565b82611c6457610e00565b611c6d84611938565b15611cee57611c7f811561020261054b565b611c8e8347101561020461054b565b611c96610526565b6001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015611cd057600080fd5b505af1158015611ce4573d6000803e3d6000fd5b5050505050610e00565b6000611cf985610548565b90508115611d16576000611d108483876001612b20565b90940393505b8315611d3157611d316001600160a01b038216843087612ba6565b5050505050565b82611d4257610e00565b611d4b84611938565b15611ddb57611d5d811561020261054b565b611d65610526565b6001600160a01b0316632e1a7d4d846040518263ffffffff1660e01b8152600401611d909190615d3e565b600060405180830381600087803b158015611daa57600080fd5b505af1158015611dbe573d6000803e3d6000fd5b50611dd6925050506001600160a01b03831684612bc7565b610e00565b6000611de685610548565b90508115611dfe57611df9838286612b76565b611d31565b611d316001600160a01b0382168486611ea6565b610559818314606761054b565b600080611e2a6113af565b6001600160a01b031663d877845c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e6257600080fd5b505afa158015611e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9a9190615968565b90506118768382613025565b610fa08363a9059cbb60e01b8484604051602401611ec5929190615bc1565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152613072565b801561055957610559611f226113af565b6001600160a01b0384169083611ea6565b611f3c81612683565b61057e611f4882612938565b6001600160a01b0316336001600160a01b0316146101f561054b565b600061ffff605083901c166116f5600382106101f461054b565b611f9f816001600160a01b0316836001600160a01b0316141561020a61054b565b611fbe816001600160a01b0316836001600160a01b031610606661054b565b60008381526009602052604090208054611ffb906001600160a01b0316158015611ff3575060018201546001600160a01b0316155b61020b61054b565b80546001600160a01b039384166001600160a01b03199182161782556001909101805492909316911617905550565b6000828152600860205260408120905b8251811015610e0057600061206b84838151811061205457fe5b60200260200101518461311290919063ffffffff16565b90506120798161020a61054b565b5060010161203a565b6000828152600160205260408120905b8251811015610e005760006120c08483815181106120ac57fe5b602090810291909101015184906000613175565b90506120ce8161020a61054b565b50600101612092565b60008060006120e7868686613222565b9250925092506121116120f9846132e9565b80156121095750612109836132e9565b61020d61054b565b600095865260096020526040862080546001600160a01b031990811682556001909101805490911690559490945550505050565b6000828152600860205260408120905b8251811015610e0057600083828151811061216c57fe5b602002602001015190506121b8612109600760008881526020019081526020016000206000846001600160a01b03166001600160a01b03168152602001908152602001600020546132e9565b60008581526007602090815260408083206001600160a01b038516845290915281208190556121e7848361330b565b90506121f58161020961054b565b5050600101612155565b6000828152600160205260408120905b8251811015610e0057600083828151811061222657fe5b60200260200101519050600061223c8483613412565b905061224a612109826132e9565b6122548483613421565b50505080600101905061220f565b61226a614d5a565b5090565b612276611768565b8361228081612683565b8361228a81611b0f565b61229e836000015151846020015151611e12565b60606122ad84600001516134c3565b905060606122bb8883613552565b905060608060606122d08c8c8c8c8c896135e3565b92509250925060006122e18c611f64565b905060028160028111156122f157fe5b1415612359576123548c8760008151811061230857fe5b60200260200101518660008151811061231d57fe5b60200260200101518960018151811061233257fe5b60200260200101518860018151811061234757fe5b60200260200101516137a8565b612382565b600181600281111561236757fe5b1415612378576123548c87866137e7565b6123828c85613854565b6000808e600181111561239157fe5b1490508b6001600160a01b03168d7fe5ce249087ce04f05a957192435400fd97868dba0e6a4b4c049abf8af80dae78896123cb888661389d565b876040516123db93929190615c4c565b60405180910390a3505050505050505050611d31611822565b6060835167ffffffffffffffff8111801561240e57600080fd5b50604051908082528060200260200182016040528015612438578160200160208202803683370190505b509050612443614d84565b61244b614ce1565b60008060005b89518110156126765789818151811061246657fe5b6020026020010151945060008951866020015110801561248a575089518660400151105b905061249781606461054b565b60006124b98b8860200151815181106124ac57fe5b6020026020010151611b41565b905060006124d08c8960400151815181106124ac57fe5b90506124f3816001600160a01b0316836001600160a01b031614156101fd61054b565b60608801516125435761250b600085116101fe61054b565b60006125188b8484613945565b6001600160a01b0316876001600160a01b031614905061253a816101ff61054b565b50606088018590525b87516080880152868a600181111561255757fe5b9081600181111561256457fe5b9052506001600160a01b0380831660208901528181166040808a01919091526060808b0151908a015260808a01516101008a01528c51821660c08a01528c01511660e08801526000806125b689611b66565b919850925090506125c88c8585613967565b97506125fc6125d683613981565b8c8c60200151815181106125e657fe5b60200260200101516139b190919063ffffffff16565b8b8b602001518151811061260c57fe5b60200260200101818152505061264a61262482613981565b8c8c604001518151811061263457fe5b60200260200101516139e590919063ffffffff16565b8b8b604001518151811061265a57fe5b6020026020010181815250505050505050806001019050612451565b5050505050949350505050565b60008181526005602052604090205461057e9060ff166101f461054b565b60008060008060006126b287613a19565b945094509450945050836001600160a01b0316866001600160a01b031614156126e157829450505050506116f5565b816001600160a01b0316866001600160a01b031614156127065793506116f592505050565b6127116102096116fb565b5050505092915050565b60008281526007602090815260408083206001600160a01b03851684529091528120548161274882613a8f565b80612766575060008581526008602052604090206127669085613aa1565b9050806127815761277685612683565b6127816102096116fb565b509392505050565b60008281526001602052604081206109e18184613412565b6dffffffffffffffffffffffffffff1690565b60701c6dffffffffffffffffffffffffffff1690565b60e01c90565b6000806127dc84611f64565b905060028160028111156127ec57fe5b1415612804576127fc8484613ac2565b9150506116f5565b600181600281111561281257fe5b1415612822576127fc8484613b13565b6127fc8484613b2b565b600080600061283a86611f64565b9050600087600281111561284a57fe5b14156128665761285c86828787613b43565b9250925050612892565b600187600281111561287457fe5b14156128865761285c86828787613bbe565b61285c86828787613c3a565b94509492505050565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612908613c9d565b3060405160200161291d959493929190615df0565b60405160208183030381529060405280519060200120905090565b60601c90565b606080600061294c84611f64565b9050600281600281111561295c57fe5b14156129755761296b84613ca1565b925092505061299b565b600181600281111561298357fe5b14156129925761296b84613dd6565b61296b84613efd565b915091565b60606000825167ffffffffffffffff811180156129bc57600080fd5b506040519080825280602002602001820160405280156129e6578160200160208202803683370190505b5091506000905060005b825181101561151d576000848281518110612a0757fe5b60200260200101519050612a1a81613ff9565b848381518110612a2657fe5b602002602001018181525050612a4483612a3f836127ca565b614014565b9250506001016129f0565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6003546040517f9be2a88400000000000000000000000000000000000000000000000000000000815260009161010090046001600160a01b031690639be2a88490612ad090869086903090600401615d47565b60206040518083038186803b158015612ae857600080fd5b505afa158015612afc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f29190615478565b600080612b2d8686611a01565b9050612b468380612b3e5750848210155b61020161054b565b612b50818561402b565b9150818103612b6c878783612b6487613981565b60000361403a565b5050949350505050565b6000612b828484611a01565b90506000612b908284611945565b9050611d31858583612ba187613981565b61403a565b610e00846323b872dd60e01b858585604051602401611ec593929190615b77565b612bd6814710156101a361054b565b6000826001600160a01b031682604051612bef90610548565b60006040518083038185875af1925050503d8060008114612c2c576040519150601f19603f3d011682016040523d82523d6000602084013e612c31565b606091505b50509050610fa0816101a461054b565b6001600160a01b0382166000908152600260205260409020805460018101909155610fa0612c6f8483614095565b8361054b565b600080600080612c92866080015187602001518860400151613222565b92509250925060008087604001516001600160a01b031688602001516001600160a01b03161015612cc7575083905082612ccd565b50829050835b612cd9888884846141bb565b60408b015160208c01519199509294509092506001600160a01b03918216911610612d0d57612d0881836142d1565b612d17565b612d1782826142d1565b909255509295945050505050565b600080612d3a8460800151856020015161271b565b90506000612d508560800151866040015161271b565b9050612d5e858584846141bb565b6080880180516000908152600760208181526040808420828e01516001600160a01b03908116865290835281852098909855935183529081528282209a830151909516815298909352919096209590955550929392505050565b60808201516000908152600160209081526040822090840151829182918290612de290839061430c565b90506000612dfd88604001518461430c90919063ffffffff16565b9050811580612e0a575080155b15612e2757612e1c8860800151612683565b612e276102096116fb565b60001991820191016000612e3a8461432b565b905060608167ffffffffffffffff81118015612e5557600080fd5b50604051908082528060200260200182016040528015612e7f578160200160208202803683370190505b50600060a08c018190529091505b82811015612eff576000612ea1878361432f565b9050612eac81613ff9565b838381518110612eb857fe5b602002602001018181525050612ed58c60a00151612a3f836127ca565b60a08d015281861415612eea57809850612ef6565b84821415612ef6578097505b50600101612e8d565b506040517f01ec954a0000000000000000000000000000000000000000000000000000000081526001600160a01b038a16906301ec954a90612f4b908d90859089908990600401615e5b565b602060405180830381600087803b158015612f6557600080fd5b505af1158015612f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9d9190615968565b9750600080612fb58c600001518d606001518c612ff7565b9092509050612fc48983614345565b9850612fd08882614376565b9750612fdd87878b61438c565b612fe887868a61438c565b50505050505050505092915050565b6000808085600181111561300757fe5b141561301757508290508161301d565b50819050825b935093915050565b600082820261304984158061304257508385838161303f57fe5b04145b600361054b565b806130585760009150506116f5565b670de0b6b3a76400006000198201046001019150506116f5565b60006060836001600160a01b03168360405161308e9190615aea565b6000604051808303816000865af19150503d80600081146130cb576040519150601f19603f3d011682016040523d82523d6000602084013e6130d0565b606091505b509150915060008214156130e8573d6000803e3d6000fd5b610e0081516000148061310a57508180602001905181019061310a9190615478565b6101a261054b565b600061311e8383613aa1565b61316d57508154600180820184556000848152602080822090930180546001600160a01b0319166001600160a01b038616908117909155855490825282860190935260409020919091556116f5565b5060006116f5565b6001600160a01b03821660009081526002840160205260408120548061320257505082546040805180820182526001600160a01b03858116808352602080840187815260008781526001808c018452878220965187546001600160a01b03191696169590951786559051948401949094559482018089559083526002880190945291902091909155611876565b600019016000908152600180860160205260408220018390559050611876565b600080600080600061323487876143a4565b91509150600061324483836143d5565b60008a81526009602090815260408083208484526002019091528120805460018201549197509293509061327783613a8f565b80613286575061328682613a8f565b806132a757506132968c87613ac2565b80156132a757506132a78c86613ac2565b9050806132c2576132b78c612683565b6132c26102096116fb565b6132cc8383614408565b98506132d8838361442d565b975050505050505093509350939050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6001600160a01b03811660009081526001830160205260408120548015613408578354600019808301919081019060009087908390811061334857fe5b60009182526020909120015487546001600160a01b039091169150819088908590811061337157fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600189810190925260409020908401905586548790806133ba57fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03881682526001898101909152604082209190915594506116f59350505050565b60009150506116f5565b60006116f28383610209614444565b6001600160a01b0381166000908152600283016020526040812054801561340857835460001990810160008181526001878101602090815260408084209587018452808420865481546001600160a01b03199081166001600160a01b0392831617835588860180549387019390935588548216875260028d018086528488209a909a5588541690975584905593895593871682529390925281205590506116f5565b606080825167ffffffffffffffff811180156134de57600080fd5b50604051908082528060200260200182016040528015613508578160200160208202803683370190505b50905060005b83518110156107ff576135268482815181106124ac57fe5b82828151811061353257fe5b6001600160a01b039092166020928302919091019091015260010161350e565b60608060606135608561293e565b9150915061357082518551611e12565b613580600083511161020f61054b565b60005b82518110156135da576135d285828151811061359b57fe5b60200260200101516001600160a01b03168483815181106135b857fe5b60200260200101516001600160a01b03161461020861054b565b600101613583565b50949350505050565b60608060608060006135f4866129a0565b9150915060006136038b612938565b905060008c600181111561361357fe5b146136b657806001600160a01b03166374f3b0098c8c8c8787613634614481565b8f604001516040518863ffffffff1660e01b815260040161365b9796959493929190615d66565b600060405180830381600087803b15801561367557600080fd5b505af1158015613689573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136b19190810190615405565b61374f565b806001600160a01b031663d5c096c48c8c8c87876136d2614481565b8f604001516040518863ffffffff1660e01b81526004016136f99796959493929190615d66565b600060405180830381600087803b15801561371357600080fd5b505af1158015613727573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261374f9190810190615405565b80955081965050506137658751865186516144fb565b60008c600181111561377357fe5b1461378a576137858989898888614513565b613797565b6137978a8989888861465a565b955050505096509650969350505050565b60006137b485846143d5565b600087815260096020908152604080832084845260020190915290209091506137dd85846142d1565b9055505050505050565b60005b8251811015610e00578181815181106137ff57fe5b602002602001015160076000868152602001908152602001600020600085848151811061382857fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020556001016137ea565b6000828152600160205260408120905b8251811015610e00576138958184838151811061387d57fe5b60200260200101518461438c9092919063ffffffff16565b600101613864565b6060825167ffffffffffffffff811180156138b757600080fd5b506040519080825280602002602001820160405280156138e1578160200160208202803683370190505b50905060005b83518110156107ff57826139115783818151811061390157fe5b6020026020010151600003613926565b83818151811061391d57fe5b60200260200101515b82828151811061393257fe5b60209081029190910101526001016138e7565b60008084600181111561395457fe5b1461395f57816109e1565b509092915050565b60008084600181111561397657fe5b146107ff57826109e1565b600061226a7f800000000000000000000000000000000000000000000000000000000000000083106101a561054b565b60008282016116f28284128015906139c95750848212155b806139de57506000841280156139de57508482125b600061054b565b60008183036116f28284128015906139fd5750848213155b80613a125750600084128015613a1257508482135b600161054b565b6000818152600960205260408120805460018201546001600160a01b0391821692849290911690829081613a4d86856143d5565b6000818152600284016020526040902080546001820154919950919250613a748282614408565b9650613a80828261442d565b94505050505091939590929450565b6000613a9a826132e9565b1592915050565b6001600160a01b031660009081526001919091016020526040902054151590565b600082815260096020526040812080546001600160a01b0384811691161480613afa575060018101546001600160a01b038481169116145b80156109e1575050506001600160a01b03161515919050565b60008281526008602052604081206109e18184613aa1565b60008281526001602052604081206109e181846147d0565b6000806002856002811115613b5457fe5b1415613b6a57613b658685856147f1565b613b94565b6001856002811115613b7857fe5b1415613b8957613b658685856147ff565b613b9486858561480d565b8215613bae57613bae6001600160a01b0385163385611ea6565b5050600081900394909350915050565b6000806002856002811115613bcf57fe5b1415613be557613be086858561481b565b613c0f565b6001856002811115613bf357fe5b1415613c0457613be0868585614829565b613c0f868585614837565b8215613c2a57613c2a6001600160a01b038516333086612ba6565b5090946000869003945092505050565b6000806002856002811115613c4b57fe5b1415613c6357613c5c868585614845565b9050613c90565b6001856002811115613c7157fe5b1415613c8257613c5c868585614855565b613c8d868585614865565b90505b6000915094509492505050565b4690565b606080600080600080613cb387613a19565b92975090955093509150506001600160a01b0384161580613cdb57506001600160a01b038216155b15613d04575050604080516000808252602082019081528183019092529450925061299b915050565b60408051600280825260608201835290916020830190803683370190505095508386600081518110613d3257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508186600181518110613d6057fe5b6001600160a01b03929092166020928302919091018201526040805160028082526060820183529092909190830190803683370190505094508285600081518110613da757fe5b6020026020010181815250508085600181518110613dc157fe5b60200260200101818152505050505050915091565b60008181526008602052604090206060908190613df28161432b565b67ffffffffffffffff81118015613e0857600080fd5b50604051908082528060200260200182016040528015613e32578160200160208202803683370190505b509250825167ffffffffffffffff81118015613e4d57600080fd5b50604051908082528060200260200182016040528015613e77578160200160208202803683370190505b50915060005b8351811015613ef6576000613e928383614875565b905080858381518110613ea157fe5b6001600160a01b03928316602091820292909201810191909152600088815260078252604080822093851682529290915220548451859084908110613ee257fe5b602090810291909101015250600101613e7d565b5050915091565b60008181526001602052604090206060908190613f198161432b565b67ffffffffffffffff81118015613f2f57600080fd5b50604051908082528060200260200182016040528015613f59578160200160208202803683370190505b509250825167ffffffffffffffff81118015613f7457600080fd5b50604051908082528060200260200182016040528015613f9e578160200160208202803683370190505b50915060005b8351811015613ef657613fb782826148a2565b858381518110613fc357fe5b60200260200101858481518110613fd657fe5b60209081029190910101919091526001600160a01b039091169052600101613fa4565b6000614004826127b4565b61400d836127a1565b0192915050565b60008183101561402457816116f2565b5090919050565b600081831061402457816116f2565b6001600160a01b038085166000818152600b602090815260408083209488168084529490915290819020859055517f18e1ea4139e68413d7d08aa752e71568e36b2c5bf940893314c2c5b01eaa0c42906119d0908590615d3e565b6000806140a06148c6565b9050428110156140b45760009150506116f5565b60006140be6148d2565b9050806140d0576000925050506116f5565b6000816140db6149e3565b80516020918201206040516140f7939233918a91899101615dc4565b604051602081830303815290604052805190602001209050600061411a82614a32565b90506000806000614129614a4e565b9250925092506000600185858585604051600081526020016040526040516141549493929190615e1c565b6020604051602081039080840390855afa158015614176573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906141ac57508a6001600160a01b0316816001600160a01b0316145b9b9a5050505050505050505050565b6000806000806141ca86613ff9565b905060006141d786613ff9565b90506141ee6141e5886127ca565b612a3f886127ca565b60a08a01526040517f9d2c110c0000000000000000000000000000000000000000000000000000000081526001600160a01b03891690639d2c110c9061423c908c9086908690600401615e94565b602060405180830381600087803b15801561425657600080fd5b505af115801561426a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061428e9190615968565b92506000806142a68b600001518c6060015187612ff7565b90925090506142b58983614345565b96506142c18882614376565b9550505050509450945094915050565b6000806142e96142e0856127ca565b612a3f856127ca565b90506109e16142f7856127a1565b614300856127a1565b8363ffffffff16614a75565b6001600160a01b03166000908152600291909101602052604090205490565b5490565b6000908152600191820160205260409020015490565b60008061435b83614355866127a1565b90611945565b90506000614368856127b4565b9050436112a6838383614a83565b60008061435b83614386866127a1565b90614abc565b60009182526001928301602052604090912090910155565b600080826001600160a01b0316846001600160a01b0316106143c75782846143ca565b83835b915091509250929050565b600082826040516020016143ea929190615b06565b60405160208183030381529060405280519060200120905092915050565b60006116f2614416846127a1565b61441f846127a1565b614428866127ca565b614a83565b60006116f261443b846127b4565b61441f846127b4565b6001600160a01b038216600090815260028401602052604081205461446b8115158461054b565b614478856001830361432f565b95945050505050565b600061448b6113af565b6001600160a01b03166355c676286040518163ffffffff1660e01b815260040160206040518083038186803b1580156144c357600080fd5b505afa1580156144d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190615968565b610fa0828414801561450c57508183145b606761054b565b6060835167ffffffffffffffff8111801561452d57600080fd5b50604051908082528060200260200182016040528015614557578160200160208202803683370190505b50905060005b85515181101561465057600084828151811061457557fe5b602002602001015190506145a58760200151838151811061459257fe5b60200260200101518210156101f961054b565b6000876000015183815181106145b757fe5b602002602001015190506145d181838b8b60600151611d38565b60008584815181106145df57fe5b602002602001015190506145fb6145f583611b41565b82611f11565b61462a6146088483611945565b89868151811061461457fe5b602002602001015161437690919063ffffffff16565b85858151811061463657fe5b60200260200101818152505050505080600101905061455d565b5095945050505050565b60606000845167ffffffffffffffff8111801561467657600080fd5b506040519080825280602002602001820160405280156146a0578160200160208202803683370190505b50915060005b8651518110156147c65760008582815181106146be57fe5b602002602001015190506146ee886020015183815181106146db57fe5b60200260200101518211156101fa61054b565b60008860000151838151811061470057fe5b6020026020010151905061471a81838c8c60600151611c5a565b61472381611938565b15614735576147328483611945565b93505b600086848151811061474357fe5b602002602001015190506147596145f583611b41565b80831015614778576147738382038a868151811061461457fe5b6147a0565b6147a08184038a868151811061478a57fe5b602002602001015161434590919063ffffffff16565b8685815181106147ac57fe5b6020026020010181815250505050508060010190506146a6565b50614650816119de565b6001600160a01b031660009081526002919091016020526040902054151590565b610e008383614ad284614b0d565b610e008383614ad284614bb8565b610e008383614ad284614c13565b610e008383614c6284614b0d565b610e008383614c6284614bb8565b610e008383614c6284614c13565b60006109e18484614c8385614b0d565b60006109e18484614c8385614bb8565b60006109e18484614c8385614c13565b600082600001828154811061488657fe5b6000918252602090912001546001600160a01b03169392505050565b600090815260019182016020526040902080549101546001600160a01b0390911691565b60006112ce6000614c9d565b6000803560e01c8063b95cac28811461491a57638bdb39138114614942576352bbbe29811461496a5763945bcec981146149925763fa6e671d81146149ba57600092506149de565b7f3f7b71252bd19113ff48c19c6e004a9bcfcca320a0d74d58e85877cbd7dcae5892506149de565b7f8bbc57f66ea936902f50a71ce12b92c43f3c5340bb40c27c4e90ab84eeae335392506149de565b7fe192dcbc143b1e244ad73b813fd3c097b832ad260a157340b4e5e5beda067abe92506149de565b7f9bfc43a4d98313c6766986ffd7c916c7481566d9f224c6819af0a53388aced3a92506149de565b7fa3f865aa351e51cfeb40f5178d1564bb629fe9030b83caf6361d1baaf5b90b5a92505b505090565b60606000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505050608010156105485760803603815290565b6000614a3c61289b565b8260405160200161112e929190615b2d565b6000806000614a5d6020614c9d565b9250614a696040614c9d565b91506108416060614c9d565b60e01b60709190911b010190565b6000838301614ab1858210801590614aa957506e01000000000000000000000000000082105b61020e61054b565b614478858585614a75565b6000614acc83831115600161054b565b50900390565b600080614ae283614386866127a1565b90506000614af384614355876127b4565b90506000614b00866127ca565b90506112a6838383614a83565b6000806000806000614b1e89613a19565b9450509350935093506000836001600160a01b0316896001600160a01b03161415614b69576000614b5384898b63ffffffff16565b9050614b5f8185614ca7565b9093509050614b8b565b6000614b7983898b63ffffffff16565b9050614b858184614ca7565b90925090505b614b9583836142d1565b8555614ba18383614cc3565b600190950194909455509192505050949350505050565b600080614bc5868661271b565b90506000614bd782858763ffffffff16565b60008881526007602090815260408083206001600160a01b038b16845290915290208190559050614c088183614ca7565b979650505050505050565b600084815260016020526040812081614c2c8287613412565b90506000614c3e82868863ffffffff16565b9050614c4b838883613175565b50614c568183614ca7565b98975050505050505050565b600080614c7283614355866127a1565b90506000614af384614386876127b4565b600080614c8f846127a1565b905043614478828583614a83565b3601607f19013590565b6000614cb2826127b4565b614cbb846127b4565b039392505050565b60006116f2614cd1846127b4565b614cda846127b4565b6000614a75565b60408051610120810190915280600081526000602082018190526040820181905260608083018290526080830182905260a0830182905260c0830182905260e08301919091526101009091015290565b604080516080810190915280600081526000602082018190526040820181905260609091015290565b60405180608001604052806060815260200160608152602001606081526020016000151581525090565b6040518060a0016040528060008019168152602001600081526020016000815260200160008152602001606081525090565b80356116f581615f5a565b600082601f830112614dd1578081fd5b8135614de4614ddf82615f04565b615edd565b818152915060208083019084810181840286018201871015614e0557600080fd5b60005b84811015614e2d578135614e1b81615f5a565b84529282019290820190600101614e08565b505050505092915050565b600082601f830112614e48578081fd5b8135614e56614ddf82615f04565b818152915060208083019084810160005b84811015614e2d578135870160a080601f19838c03011215614e8857600080fd5b614e9181615edd565b85830135815260408084013587830152606080850135828401526080915081850135818401525082840135925067ffffffffffffffff831115614ed357600080fd5b614ee18c8885870101614fc0565b90820152865250509282019290820190600101614e67565b600082601f830112614f09578081fd5b8135614f17614ddf82615f04565b818152915060208083019084810181840286018201871015614f3857600080fd5b60005b84811015614e2d57813584529282019290820190600101614f3b565b600082601f830112614f67578081fd5b8151614f75614ddf82615f04565b818152915060208083019084810181840286018201871015614f9657600080fd5b60005b84811015614e2d57815184529282019290820190600101614f99565b80356116f581615f6f565b600082601f830112614fd0578081fd5b813567ffffffffffffffff811115614fe6578182fd5b614ff9601f8201601f1916602001615edd565b915080825283602082850101111561501057600080fd5b8060208401602084013760009082016020015292915050565b80356116f581615f7d565b8035600281106116f557600080fd5b8035600481106116f557600080fd5b600060808284031215615063578081fd5b61506d6080615edd565b9050813567ffffffffffffffff8082111561508757600080fd5b61509385838601614dc1565b835260208401359150808211156150a957600080fd5b6150b585838601614ef9565b602084015260408401359150808211156150ce57600080fd5b506150db84828501614fc0565b6040830152506150ee8360608401614fb5565b606082015292915050565b60006080828403121561510a578081fd5b6151146080615edd565b9050813561512181615f5a565b8152602082013561513181615f6f565b6020820152604082013561514481615f5a565b604082015260608201356150ee81615f6f565b600060208284031215615168578081fd5b81356116f281615f5a565b60008060408385031215615185578081fd5b823561519081615f5a565b915060208301356151a081615f5a565b809150509250929050565b6000806000606084860312156151bf578081fd5b83356151ca81615f5a565b925060208401356151da81615f5a565b915060408401356151ea81615f6f565b809150509250925092565b60008060408385031215615207578182fd5b823561521281615f5a565b9150602083013567ffffffffffffffff81111561522d578182fd5b61523985828601614dc1565b9150509250929050565b60006020808385031215615255578182fd5b823567ffffffffffffffff81111561526b578283fd5b8301601f8101851361527b578283fd5b8035615289614ddf82615f04565b818152838101908385016080808502860187018a10156152a7578788fd5b8795505b848610156153105780828b0312156152c1578788fd5b6152ca81615edd565b6152d48b84615029565b8152878301358882015260406152ec8c828601614db6565b908201526060838101359082015284526001959095019492860192908101906152ab565b509098975050505050505050565b60006020808385031215615330578182fd5b823567ffffffffffffffff811115615346578283fd5b8301601f81018513615356578283fd5b8035615364614ddf82615f04565b8181528381019083850160a0808502860187018a1015615382578788fd5b8795505b848610156153105780828b03121561539c578788fd5b6153a581615edd565b6153af8b84615043565b81526153bd8b898501614db6565b818901526040838101359082015260606153d98c828601614db6565b9082015260806153eb8c858301614db6565b908201528452600195909501949286019290810190615386565b60008060408385031215615417578182fd5b825167ffffffffffffffff8082111561542e578384fd5b61543a86838701614f57565b9350602085015191508082111561544f578283fd5b5061523985828601614f57565b60006020828403121561546d578081fd5b81356116f281615f6f565b600060208284031215615489578081fd5b81516116f281615f6f565b6000602082840312156154a5578081fd5b5035919050565b600080600080608085870312156154c1578182fd5b8435935060208501356154d381615f5a565b925060408501356154e381615f5a565b9150606085013567ffffffffffffffff8111156154fe578182fd5b61550a87828801615052565b91505092959194509250565b60008060408385031215615528578182fd5b82359150602083013567ffffffffffffffff81111561522d578182fd5b600080600060608486031215615559578081fd5b8335925060208085013567ffffffffffffffff80821115615578578384fd5b61558488838901614dc1565b94506040870135915080821115615599578384fd5b508501601f810187136155aa578283fd5b80356155b8614ddf82615f04565b81815283810190838501858402850186018b10156155d4578687fd5b8694505b838510156155ff5780356155eb81615f5a565b8352600194909401939185019185016155d8565b5080955050505050509250925092565b60008060408385031215615621578182fd5b8235915060208301356151a081615f5a565b600060208284031215615644578081fd5b81356001600160e01b0319811681146116f2578182fd5b60008060008060808587031215615670578182fd5b843561567b81615f5a565b9350602085013567ffffffffffffffff80821115615697578384fd5b6156a388838901614dc1565b945060408701359150808211156156b8578384fd5b6156c488838901614ef9565b935060608701359150808211156156d9578283fd5b5061550a87828801614fc0565b6000602082840312156156f7578081fd5b81356116f281615f7d565b60008060008060e08587031215615717578182fd5b6157218686615034565b9350602085013567ffffffffffffffff8082111561573d578384fd5b61574988838901614e38565b9450604087013591508082111561575e578384fd5b5061576b87828801614dc1565b92505061577b86606087016150f9565b905092959194509250565b600080600080600080610120878903121561579f578384fd5b6157a98888615034565b955060208088013567ffffffffffffffff808211156157c6578687fd5b6157d28b838c01614e38565b975060408a01359150808211156157e7578687fd5b6157f38b838c01614dc1565b96506158028b60608c016150f9565b955060e08a0135915080821115615817578485fd5b508801601f81018a13615828578384fd5b8035615836614ddf82615f04565b81815283810190838501858402850186018e1015615852578788fd5b8794505b83851015615874578035835260019490940193918501918501615856565b50809650505050505061010087013590509295509295509295565b60008060008060e085870312156158a4578182fd5b843567ffffffffffffffff808211156158bb578384fd5b9086019060c082890312156158ce578384fd5b6158d860c0615edd565b823581526158e98960208501615034565b602082015260408301356158fc81615f5a565b604082015261590e8960608501614db6565b60608201526080830135608082015260a08301358281111561592e578586fd5b61593a8a828601614fc0565b60a08301525080965050505061595386602087016150f9565b939693955050505060a08201359160c0013590565b600060208284031215615979578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156159c55781516001600160a01b0316875295820195908201906001016159a0565b509495945050505050565b6000815180845260208085019450808401835b838110156159c5578151875295820195908201906001016159e3565b60008151808452615a17816020860160208601615f24565b601f01601f19169290920160200192915050565b6000610120825160028110615a3c57fe5b808552506020830151615a526020860182615980565b506040830151615a656040860182615980565b50606083015160608501526080830151608085015260a083015160a085015260c0830151615a9660c0860182615980565b5060e0830151615aa960e0860182615980565b506101008084015182828701526112a6838701826159ff565b9182526001600160e01b031916602082015260240190565b6000828483379101908152919050565b60008251615afc818460208701615f24565b9190910192915050565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038316815260408101615bb483615f50565b8260208301529392505050565b6001600160a01b03929092168252602082015260400190565b6000602082526116f2602083018461598d565b600060408252615c00604083018561598d565b828103602084810191909152845180835285820192820190845b81811015615c3f5784516001600160a01b031683529383019391830191600101615c1a565b5090979650505050505050565b600060608252615c5f606083018661598d565b8281036020840152615c7181866159d0565b905082810360408401526112a681856159d0565b600060808252615c98608083018761598d565b8281036020840152615caa81876159d0565b90508281036040840152615cbe81866159d0565b90508281036060840152614c0881856159ff565b600060608252615ce5606083018661598d565b8281036020840152615cf781866159d0565b915050826040830152949350505050565b6000602082526116f260208301846159d0565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b60008882526001600160a01b03808916602084015280881660408401525060e06060830152615d9860e08301876159d0565b8560808401528460a084015282810360c0840152615db681856159ff565b9a9950505050505050505050565b94855260208501939093526001600160a01b039190911660408401526060830152608082015260a00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b60208101615e4783615f50565b91905290565b918252602082015260400190565b600060808252615e6e6080830187615a2b565b8281036020840152615e8081876159d0565b604084019590955250506060015292915050565b600060608252615ea76060830186615a2b565b60208301949094525060400152919050565b938452602084019290925260408301526001600160a01b0316606082015260800190565b60405181810167ffffffffffffffff81118282101715615efc57600080fd5b604052919050565b600067ffffffffffffffff821115615f1a578081fd5b5060209081020190565b60005b83811015615f3f578181015183820152602001615f27565b83811115610e005750506000910152565b6003811061057e57fe5b6001600160a01b038116811461057e57600080fd5b801515811461057e57600080fd5b6003811061057e57600080fdfea2646970667358221220201e4f926e390fed8dd5318c58846af735c2bebc61b80693ae936a5fe76dcf1464736f6c6343000701003360c060405234801561001057600080fd5b50604051610be6380380610be683398101604081905261002f9161004d565b30608052600160005560601b6001600160601b03191660a05261007b565b60006020828403121561005e578081fd5b81516001600160a01b0381168114610074578182fd5b9392505050565b60805160a05160601c610b406100a66000398061041352806105495250806102a75250610b406000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063851c1bb311610076578063d877845c1161005b578063d877845c14610129578063e42abf3514610131578063fbfa77cf14610151576100a3565b8063851c1bb314610101578063aaabadc514610114576100a3565b806338e9922e146100a857806355c67628146100bd5780636b6b9f69146100db5780636daefab6146100ee575b600080fd5b6100bb6100b636600461099c565b610159565b005b6100c56101b8565b6040516100d29190610aa6565b60405180910390f35b6100bb6100e936600461099c565b6101be565b6100bb6100fc3660046107d1565b610211565b6100c561010f366004610924565b6102a3565b61011c6102f5565b6040516100d29190610a35565b6100c5610304565b61014461013f366004610852565b61030a565b6040516100d29190610a62565b61011c610411565b610161610435565b6101786706f05b59d3b2000082111561025861047e565b60018190556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906101ad908390610aa6565b60405180910390a150565b60015490565b6101c6610435565b6101dc662386f26fc1000082111561025961047e565b60028190556040517f5a0b7386237e7f07fa741efc64e59c9387d2cccafec760efed4d53387f20e19a906101ad908390610aa6565b610219610490565b610221610435565b61022b84836104a9565b60005b8481101561029357600086868381811061024457fe5b90506020020160208101906102599190610980565b9050600085858481811061026957fe5b6020029190910135915061028990506001600160a01b03831685836104b6565b505060010161022e565b5061029c61053e565b5050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016102d89291906109cc565b604051602081830303815290604052805190602001209050919050565b60006102ff610545565b905090565b60025490565b6060815167ffffffffffffffff8111801561032457600080fd5b5060405190808252806020026020018201604052801561034e578160200160208202803683370190505b50905060005b825181101561040b5782818151811061036957fe5b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161039c9190610a35565b60206040518083038186803b1580156103b457600080fd5b505afa1580156103c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ec91906109b4565b8282815181106103f857fe5b6020908102919091010152600101610354565b50919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006104646000357fffffffff00000000000000000000000000000000000000000000000000000000166102a3565b905061047b61047382336105d8565b61019161047e565b50565b8161048c5761048c8161066a565b5050565b6104a26002600054141561019061047e565b6002600055565b61048c818314606761047e565b6105398363a9059cbb60e01b84846040516024016104d5929190610a49565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526106d7565b505050565b6001600055565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a057600080fd5b505afa1580156105b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ff9190610964565b60006105e2610545565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b815260040161061193929190610aaf565b60206040518083038186803b15801561062957600080fd5b505afa15801561063d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066191906108fd565b90505b92915050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b60006060836001600160a01b0316836040516106f391906109fc565b6000604051808303816000865af19150503d8060008114610730576040519150601f19603f3d011682016040523d82523d6000602084013e610735565b606091505b5091509150600082141561074d573d6000803e3d6000fd5b61077781516000148061076f57508180602001905181019061076f91906108fd565b6101a261047e565b50505050565b60008083601f84011261078e578182fd5b50813567ffffffffffffffff8111156107a5578182fd5b60208301915083602080830285010111156107bf57600080fd5b9250929050565b803561066481610af5565b6000806000806000606086880312156107e8578081fd5b853567ffffffffffffffff808211156107ff578283fd5b61080b89838a0161077d565b90975095506020880135915080821115610823578283fd5b506108308882890161077d565b909450925050604086013561084481610af5565b809150509295509295909350565b60006020808385031215610864578182fd5b823567ffffffffffffffff8082111561087b578384fd5b818501915085601f83011261088e578384fd5b81358181111561089c578485fd5b83810291506108ac848301610ace565b8181528481019084860184860187018a10156108c6578788fd5b8795505b838610156108f0576108dc8a826107c6565b8352600195909501949186019186016108ca565b5098975050505050505050565b60006020828403121561090e578081fd5b8151801515811461091d578182fd5b9392505050565b600060208284031215610935578081fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461091d578182fd5b600060208284031215610975578081fd5b815161091d81610af5565b600060208284031215610991578081fd5b813561091d81610af5565b6000602082840312156109ad578081fd5b5035919050565b6000602082840312156109c5578081fd5b5051919050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b60008251815b81811015610a1c5760208186018101518583015201610a02565b81811115610a2a5782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015610a9a57835183529284019291840191600101610a7e565b50909695505050505050565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b60405181810167ffffffffffffffff81118282101715610aed57600080fd5b604052919050565b6001600160a01b038116811461047b57600080fdfea2646970667358221220be72bdf8e7a3c38606c5f954fbe2d77798347aaa1cfb76fe77ec2f6c245d24bc64736f6c63430007010033"
-}
\ No newline at end of file
+ ]
+}
diff --git a/crates/contracts/artifacts/BalancerV2WeightedPool.json b/contracts/artifacts/BalancerV2WeightedPool.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV2WeightedPool.json
rename to contracts/artifacts/BalancerV2WeightedPool.json
index d8d777cff7..4009c41c20 100644
--- a/crates/contracts/artifacts/BalancerV2WeightedPool.json
+++ b/contracts/artifacts/BalancerV2WeightedPool.json
@@ -221,38 +221,44 @@
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
+ "inputs": [],
+ "name": "getNormalizedWeights",
+ "outputs": [
{
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
}
],
- "name": "decreaseApproval",
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPausedState",
"outputs": [
{
"internalType": "bool",
- "name": "",
+ "name": "paused",
"type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "pauseWindowEndTime",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "bufferPeriodEndTime",
+ "type": "uint256"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "bytes4",
- "name": "selector",
- "type": "bytes4"
- }
- ],
- "name": "getActionId",
+ "inputs": [],
+ "name": "getPoolId",
"outputs": [
{
"internalType": "bytes32",
@@ -265,12 +271,12 @@
},
{
"inputs": [],
- "name": "getAuthorizer",
+ "name": "getSwapFeePercentage",
"outputs": [
{
- "internalType": "contract IAuthorizer",
+ "internalType": "uint256",
"name": "",
- "type": "address"
+ "type": "uint256"
}
],
"stateMutability": "view",
@@ -278,20 +284,26 @@
},
{
"inputs": [],
- "name": "getInvariant",
+ "name": "name",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "string",
"name": "",
- "type": "uint256"
+ "type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [],
- "name": "getLastInvariant",
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "nonces",
"outputs": [
{
"internalType": "uint256",
@@ -303,57 +315,149 @@
"type": "function"
},
{
- "inputs": [],
- "name": "getNormalizedWeights",
- "outputs": [
+ "inputs": [
{
- "internalType": "uint256[]",
- "name": "",
- "type": "uint256[]"
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
}
],
- "stateMutability": "view",
+ "name": "permit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
- "name": "getOwner",
+ "name": "symbol",
"outputs": [
{
- "internalType": "address",
+ "internalType": "string",
"name": "",
- "type": "address"
+ "type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [],
- "name": "getPausedState",
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
"outputs": [
{
"internalType": "bool",
- "name": "paused",
+ "name": "",
"type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
},
{
"internalType": "uint256",
- "name": "pauseWindowEndTime",
+ "name": "amount",
"type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
},
{
"internalType": "uint256",
- "name": "bufferPeriodEndTime",
+ "name": "amount",
"type": "uint256"
}
],
- "stateMutability": "view",
+ "name": "decreaseApproval",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
"type": "function"
},
{
- "inputs": [],
- "name": "getPoolId",
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4"
+ }
+ ],
+ "name": "getActionId",
"outputs": [
{
"internalType": "bytes32",
@@ -366,12 +470,12 @@
},
{
"inputs": [],
- "name": "getRate",
+ "name": "getAuthorizer",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "contract IAuthorizer",
"name": "",
- "type": "uint256"
+ "type": "address"
}
],
"stateMutability": "view",
@@ -379,7 +483,7 @@
},
{
"inputs": [],
- "name": "getSwapFeePercentage",
+ "name": "getInvariant",
"outputs": [
{
"internalType": "uint256",
@@ -392,49 +496,51 @@
},
{
"inputs": [],
- "name": "getVault",
+ "name": "getLastInvariant",
"outputs": [
{
- "internalType": "contract IVault",
+ "internalType": "uint256",
"name": "",
- "type": "address"
+ "type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [
+ "inputs": [],
+ "name": "getOwner",
+ "outputs": [
{
"internalType": "address",
- "name": "spender",
+ "name": "",
"type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
}
],
- "name": "increaseApproval",
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getRate",
"outputs": [
{
- "internalType": "bool",
+ "internalType": "uint256",
"name": "",
- "type": "bool"
+ "type": "uint256"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
"inputs": [],
- "name": "name",
+ "name": "getVault",
"outputs": [
{
- "internalType": "string",
+ "internalType": "contract IVault",
"name": "",
- "type": "string"
+ "type": "address"
}
],
"stateMutability": "view",
@@ -444,19 +550,24 @@
"inputs": [
{
"internalType": "address",
- "name": "owner",
+ "name": "spender",
"type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
}
],
- "name": "nonces",
+ "name": "increaseApproval",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "bool",
"name": "",
- "type": "uint256"
+ "type": "bool"
}
],
- "stateMutability": "view",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -643,49 +754,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "deadline",
- "type": "uint256"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "name": "permit",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -820,19 +888,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [],
- "name": "symbol",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [],
"name": "totalSupply",
@@ -845,59 +900,6 @@
],
"stateMutability": "view",
"type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transfer",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transferFrom",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
}
]
-}
\ No newline at end of file
+}
diff --git a/crates/contracts/artifacts/BalancerV2WeightedPool2TokensFactory.json b/contracts/artifacts/BalancerV2WeightedPool2TokensFactory.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV2WeightedPool2TokensFactory.json
rename to contracts/artifacts/BalancerV2WeightedPool2TokensFactory.json
index 2dd90dbbde..c0a4ff8e54 100644
--- a/crates/contracts/artifacts/BalancerV2WeightedPool2TokensFactory.json
+++ b/contracts/artifacts/BalancerV2WeightedPool2TokensFactory.json
@@ -72,7 +72,10 @@
],
"stateMutability": "nonpayable",
"type": "function"
- },
+ }
+ ],
+ "bytecode": "0x60c060405234801561001057600080fd5b50604051615fe1380380615fe183398101604081905261002f9161004d565b60601b6001600160601b0319166080526276a700420160a05261007b565b60006020828403121561005e578081fd5b81516001600160a01b0381168114610074578182fd5b9392505050565b60805160601c60a051615f3b6100a660003980610221528061024b5250806102a75250615f3b6000f3fe60806040523480156200001157600080fd5b5060043610620000525760003560e01c80631596019b14620000575780632da47c4014620000865780636634b75314620000a05780638d928af814620000c6575b600080fd5b6200006e6200006836600462000548565b620000d0565b6040516200007d91906200068f565b60405180910390f35b620000906200021b565b6040516200007d929190620007a2565b620000b7620000b136600462000522565b62000287565b6040516200007d9190620006a3565b6200006e620002a5565b6000806000620000df6200021b565b91509150620000ed62000315565b60405180610180016040528062000103620002a5565b6001600160a01b031681526020018c81526020018b81526020018a6000815181106200012b57fe5b60200260200101516001600160a01b031681526020018a6001815181106200014f57fe5b60200260200101516001600160a01b03168152602001896000815181106200017357fe5b60200260200101518152602001896001815181106200018e57fe5b602002602001015181526020018881526020018481526020018381526020018715158152602001866001600160a01b03168152509050600081604051620001d5906200039c565b620001e19190620006ae565b604051809103906000f080158015620001fe573d6000803e3d6000fd5b5090506200020c81620002c9565b9b9a5050505050505050505050565b600080427f00000000000000000000000000000000000000000000000000000000000000008110156200027957807f000000000000000000000000000000000000000000000000000000000000000003925062278d00915062000282565b60009250600091505b509091565b6001600160a01b031660009081526020819052604090205460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc9190a250565b60405180610180016040528060006001600160a01b03168152602001606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160006001600160a01b031681525090565b6156f3806200081383390190565b8035620003b781620007f9565b92915050565b600082601f830112620003ce578081fd5b8135620003e5620003df82620007d8565b620007b0565b8181529150602080830190848101818402860182018710156200040757600080fd5b60005b84811015620004335781356200042081620007f9565b845292820192908201906001016200040a565b505050505092915050565b600082601f8301126200044f578081fd5b813562000460620003df82620007d8565b8181529150602080830190848101818402860182018710156200048257600080fd5b60005b84811015620004335781358452928201929082019060010162000485565b80358015158114620003b757600080fd5b600082601f830112620004c5578081fd5b813567ffffffffffffffff811115620004dc578182fd5b620004f1601f8201601f1916602001620007b0565b91508082528360208285010111156200050957600080fd5b8060208401602084013760009082016020015292915050565b60006020828403121562000534578081fd5b81356200054181620007f9565b9392505050565b600080600080600080600060e0888a03121562000563578283fd5b873567ffffffffffffffff808211156200057b578485fd5b620005898b838c01620004b4565b985060208a01359150808211156200059f578485fd5b620005ad8b838c01620004b4565b975060408a0135915080821115620005c3578485fd5b620005d18b838c01620003bd565b965060608a0135915080821115620005e7578485fd5b50620005f68a828b016200043e565b945050608088013592506200060f8960a08a01620004a3565b9150620006208960c08a01620003aa565b905092959891949750929550565b6001600160a01b03169052565b15159052565b60008151808452815b8181101562000668576020818501810151868301820152016200064a565b818111156200067a5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b600060208252620006c46020830184516200062e565b6020830151610180806040850152620006e26101a085018362000641565b91506040850151601f1985840301606086015262000701838262000641565b92505060608501516200071860808601826200062e565b5060808501516200072d60a08601826200062e565b5060a085015160c085015260c085015160e085015260e085015161010081818701528087015191505061012081818701528087015191505061014081818701528087015191505061016062000785818701836200063b565b860151905062000798858301826200062e565b5090949350505050565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715620007d057600080fd5b604052919050565b600067ffffffffffffffff821115620007ef578081fd5b5060209081020190565b6001600160a01b03811681146200080f57600080fd5b5056fe6102a06040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120523480156200003757600080fd5b50604051620056f3380380620056f38339810160408190526200005a916200080c565b61010081810151610120830151602080850151604080870151815180830190925260018252603160f81b8285019081526101608901513360805260601b6001600160601b03191660a052835194840194852060c052915190912060e0527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f909552805193949293909291620000f391600391906200069f565b508051620001099060049060208401906200069f565b50620001219150506276a7008311156101946200040a565b6200013562278d008211156101956200040a565b4290910161014081815291016101605281015162000153906200041f565b60e081015162000163906200047b565b80516040516309b2760f60e01b81526000916001600160a01b0316906309b2760f90620001969060029060040162000a12565b602060405180830381600087803b158015620001b157600080fd5b505af1158015620001c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ec9190620007f3565b6040805160028082526060808301845293945090916020830190803683370190505090508260600151816000815181106200022357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260800151816001815181106200025657fe5b6001600160a01b0392831660209182029290920101528351166366a9c7d283836002604051908082528060200260200182016040528015620002a2578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401620002c39392919062000976565b600060405180830381600087803b158015620002de57600080fd5b505af1158015620002f3573d6000803e3d6000fd5b505084516001600160601b0319606091821b8116610180526101a08690528187018051831b82166101c052608088015190921b166101e052516200033a92509050620004f9565b6102605260808301516200034e90620004f9565b6102805260a08301516200036f90662386f26fc10000111561012e6200040a565b62000391662386f26fc100008460c00151101561012e6200040a60201b60201c565b6000620003b58460c001518560a001516200059b60201b620011c61790919060201c565b9050620003cf670de0b6b3a764000082146101346200040a565b60a0840180516102005260c085018051610220525190511015620003f5576001620003f8565b60005b60ff16610240525062000a6392505050565b816200041b576200041b81620005b8565b5050565b6200043b816008546200060b60201b620011d81790919060201c565b6008556040517f3e350b41e86a8e10f804ade6d35340d620be35569cc75ac943e8bb14ab80ead190620004709083906200096b565b60405180910390a150565b6200049064e8d4a5100082101560cb6200040a565b620004a867016345785d8a000082111560ca6200040a565b620004c4816008546200062a60201b620011e61790919060201c565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906200047090839062000a27565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200053657600080fd5b505afa1580156200054b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000571919062000948565b60ff1690506000620005906012836200064960201b620011f41760201c565b600a0a949350505050565b6000828201620005af84821015836200040a565b90505b92915050565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b6000620005af826055856200066160201b6200120a179092919060201c565b6000620005af826056856200068a60201b62001231179092919060201c565b60006200065b8383111560016200040a565b50900390565b60006001821b1984168284620006795760006200067c565b60015b60ff16901b17949350505050565b6001600160401b03811b1992909216911b1790565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006e257805160ff191683800117855562000712565b8280016001018555821562000712579182015b8281111562000712578251825591602001919060010190620006f5565b506200072092915062000724565b5090565b5b8082111562000720576000815560010162000725565b80516001600160a01b0381168114620005b257600080fd5b80518015158114620005b257600080fd5b600082601f83011262000775578081fd5b81516001600160401b038111156200078b578182fd5b6020620007a1601f8301601f1916820162000a30565b92508183528481838601011115620007b857600080fd5b60005b82811015620007d8578481018201518482018301528101620007bb565b82811115620007ea5760008284860101525b50505092915050565b60006020828403121562000805578081fd5b5051919050565b6000602082840312156200081e578081fd5b81516001600160401b038082111562000835578283fd5b81840191506101808083870312156200084c578384fd5b620008578162000a30565b90506200086586846200073b565b815260208301518281111562000879578485fd5b620008878782860162000764565b6020830152506040830151828111156200089f578485fd5b620008ad8782860162000764565b604083015250620008c286606085016200073b565b6060820152620008d686608085016200073b565b608082015260a0838101519082015260c0808401519082015260e08084015190820152610100808401519082015261012080840151908201526101409150620009228683850162000753565b82820152610160915062000939868385016200073b565b91810191909152949350505050565b6000602082840312156200095a578081fd5b815160ff81168114620005af578182fd5b901515815260200190565b60006060820185835260206060818501528186518084526080860191508288019350845b81811015620009c257620009af855162000a57565b835293830193918301916001016200099a565b505084810360408601528551808252908201925081860190845b8181101562000a0457620009f1835162000a57565b85529383019391830191600101620009dc565b509298975050505050505050565b602081016003831062000a2157fe5b91905290565b90815260200190565b6040518181016001600160401b038111828210171562000a4f57600080fd5b604052919050565b6001600160a01b031690565b60805160a05160601c60c05160e051610100516101205161014051610160516101805160601c6101a0516101c05160601c6101e05160601c6102005161022051610240516102605161028051614bb862000b3b60003980611d12525080611d395250806129e25280612a165280612a52525080611d665280611e02525080611d8d5280611de05280611e3052505080610c6a525080610808525080610bb852508061139d525080611379525080610f205250806116a55250806116e75250806116c6525080610b94525080610b1f5250614bb86000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806374f3b0091161013b578063aaabadc5116100b8578063d5c096c41161007c578063d5c096c4146104e1578063d73dd623146104f4578063dd62ed3e14610507578063f89f27ed1461051a578063ffd088eb1461052257610248565b8063aaabadc5146104a3578063b10be739146104ab578063b48b5b40146104be578063c0ff1a15146104c6578063d505accf146104ce57610248565b80638d928af8116100ff5780638d928af81461046557806395d89b411461046d5780639b02cdde146104755780639d2c110c1461047d578063a9059cbb1461049057610248565b806374f3b009146103f65780637ecebe0014610417578063851c1bb31461042a57806387ec68171461043d578063893d20e81461045057610248565b806338e9922e116101c957806360d1507c1161018d57806360d1507c1461038257806366188463146103a8578063679aefce146103bb5780636b843239146103c357806370a08231146103e357610248565b806338e9922e1461032457806338fff2d0146103375780634a6b0b151461033f57806355c67628146103595780636028bfd41461036157610248565b80631dccd830116102105780631dccd830146102cc57806323b872dd146102ec578063292c914a146102ff578063313ce567146103075780633644e5151461031c57610248565b806306fdde031461024d578063095ea7b31461026b57806316c38b3c1461028b57806318160ddd146102a05780631c0de051146102b5575b600080fd5b61025561052a565b6040516102629190614a93565b60405180910390f35b61027e61027936600461423b565b6105c0565b6040516102629190614970565b61029e6102993660046144a9565b6105d7565b005b6102a86105eb565b6040516102629190614993565b6102bd6105f1565b6040516102629392919061497b565b6102df6102da3660046143ef565b61061a565b6040516102629190614938565b61027e6102fa366004614186565b610722565b61029e6107a5565b61030f6107d9565b6040516102629190614aff565b6102a86107de565b61029e61033236600461484b565b6107ed565b6102a8610806565b61034761082a565b60405161026296959493929190614a69565b6102a8610885565b61037461036f3660046144e1565b610892565b604051610262929190614ae6565b61039561039036600461484b565b6108c3565b6040516102629796959493929190614a39565b61027e6103b636600461423b565b61090c565b6102a8610966565b6103d66103d1366004614331565b61098b565b60405161026291906148f4565b6102a86103f1366004614132565b610a3c565b6104096104043660046144e1565b610a5b565b60405161026292919061494b565b6102a8610425366004614132565b610b00565b6102a86104383660046145dd565b610b1b565b61037461044b3660046144e1565b610b6d565b610458610b92565b60405161026291906148e0565b610458610bb6565b610255610bda565b6102a8610c3b565b6102a861048b366004614750565b610c41565b61027e61049e36600461423b565b610df0565b610458610dfd565b6102a86104b9366004614734565b610e07565b6102a8610e29565b6102a8610e2f565b61029e6104dc3660046141c6565b610eeb565b6104096104ef3660046144e1565b611034565b61027e61050236600461423b565b611154565b6102a861051536600461414e565b61118a565b6102df6111b5565b6102a86111bf565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105b65780601f1061058b576101008083540402835291602001916105b6565b820191906000526020600020905b81548152906001019060200180831161059957829003601f168201915b5050505050905090565b60006105cd338484611246565b5060015b92915050565b6105df6112ae565b6105e8816112dc565b50565b60025490565b60008060006105fe61135a565b159250610609611377565b915061061361139b565b9050909192565b606081516001600160401b038111801561063357600080fd5b5060405190808252806020026020018201604052801561065d578160200160208202803683370190505b509050600061066d6008546113bf565b9050610677613ffe565b60005b845181101561071a5784818151811061068f57fe5b602002602001015191506106ad82602001516000141561013c6113cc565b60006106c883600001518585602001518660400151016113de565b905060006106df84600001518686604001516113de565b90506106f98460200151838303816106f357fe5b05611524565b86848151811061070557fe5b6020908102919091010152505060010161067a565b505050919050565b6001600160a01b038316600081815260016020908152604080832033808552925282205491926107609114806107585750838210155b6101976113cc565b61076b858585611537565b336001600160a01b0386161480159061078657506000198114155b15610798576107988533858403611246565b60019150505b9392505050565b6107ad611606565b6107b56112ae565b6107bf6001611619565b60006107c96105eb565b11156107d7576107d7611659565b565b601290565b60006107e86116a1565b905090565b6107f56112ae565b6107fd611606565b6105e88161173e565b7f000000000000000000000000000000000000000000000000000000000000000090565b60008060008060008060006008549050610843816117a7565b965061084e816117b3565b9550610859816117c0565b9450610864816113bf565b935061086f816117cd565b925061087a816117da565b915050909192939495565b60006107e86008546117da565b600060606108a2865160026117e7565b6108b7898989898989896117f46118ae61192c565b97509795505050505050565b60008060008060008060006108de610400891061013b6113cc565b60006108e989611a4b565b90506108f481611a5d565b959f949e50929c50909a509850965090945092505050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548083106109485761094333856000611246565b61095c565b61095c338561095784876111f4565b611246565b5060019392505050565b60006107e86109736105eb565b61098561097e610e2f565b6002611ac0565b90611ae4565b606081516001600160401b03811180156109a457600080fd5b506040519080825280602002602001820160405280156109ce578160200160208202803683370190505b50905060006109de6008546113bf565b90506109e8614020565b60005b845181101561071a57848181518110610a0057fe5b60200260200101519150610a1d82600001518484602001516113de565b848281518110610a2957fe5b60209081029190910101526001016109eb565b6001600160a01b0381166000908152602081905260409020545b919050565b60608088610a85610a6a610bb6565b6001600160a01b0316336001600160a01b03161460cd6113cc565b610a9a610a90610806565b82146101f46113cc565b610aa387611b35565b6000606080610ab78d8d8d8d8d8d8d6117f4565b925092509250610ac78c84611b97565b610ad0826118ae565b610ad9816118ae565b610ae161135a565b15610aee57610aee611659565b909c909b509950505050505050505050565b6001600160a01b031660009081526005602052604090205490565b60007f000000000000000000000000000000000000000000000000000000000000000082604051602001610b5092919061489d565b604051602081830303815290604052805190602001209050919050565b60006060610b7d865160026117e7565b6108b789898989898989611c2a611cab61192c565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105b65780601f1061058b576101008083540402835291602001916105b6565b60095490565b6000610c4b611606565b8360800151610c5b610a6a610bb6565b610c66610a90610806565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686602001516001600160a01b03161490506000610cae82611d09565b90506000610cbc8315611d09565b90506000610cc984611d5d565b90506000610cd78515611d5d565b9050610ce38985611db1565b9850610cef8884611db1565b9750610d188a60a0015186610d045789610d06565b8a5b87610d11578b610d13565b8a5b611dbd565b60008a516001811115610d2757fe5b1415610d95576000610d45610d3a610885565b60608d015190611ec3565b9050610d67610d61828d606001516111f490919063ffffffff16565b86611db1565b60608c01526000610d7b8c8c8c8787611f07565b9050610d878186611f26565b985050505050505050610de8565b610da38a6060015184611db1565b60608b01526000610db78b8b8b8686611f32565b9050610dc38186611f45565b9050610ddf610dd8610dd3610885565b611f51565b8290611f77565b97505050505050505b509392505050565b60006105cd338484611537565b60006107e8611fb9565b600080610e1e83610e196008546113bf565b612033565b905061079e81611524565b61040090565b60006060610e3b610bb6565b6001600160a01b031663f94d4668610e51610806565b6040518263ffffffff1660e01b8152600401610e6d9190614993565b60006040518083038186803b158015610e8557600080fd5b505afa158015610e99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ec19190810190614266565b50915050610ece81611b35565b6060610ed861206a565b9050610ee481836120d8565b9250505090565b610ef98442111560d16113cc565b6001600160a01b0387166000908152600560209081526040808320549051909291610f50917f0000000000000000000000000000000000000000000000000000000000000000918c918c918c9188918d91016149bb565b6040516020818303038152906040528051906020012090506000610f738261214a565b9050600060018288888860405160008152602001604052604051610f9a9493929190614a1b565b6020604051602081039080840390855afa158015610fbc573d6000803e3d6000fd5b5050604051601f1901519150610ffe90506001600160a01b03821615801590610ff657508b6001600160a01b0316826001600160a01b0316145b6101f86113cc565b6001600160a01b038b1660009081526005602052604090206001850190556110278b8b8b611246565b5050505050505050505050565b60608088611043610a6a610bb6565b61104e610a90610806565b611056611606565b60006110606105eb565b6110d0576110708b8b8b88612166565b94509050611085620f424082101560cc6113cc565b6110936000620f42406121ef565b6110a289620f424083036121ef565b6110ab84611cab565b604080516002808252606082018352909160208301908036833701905050925061113e565b6110d988611b35565b61110c87896000815181106110ea57fe5b60200260200101518a6001815181106110ff57fe5b6020026020010151611dbd565b61111b8b8b8b8b8b8b8b611c2a565b9095509350905061112c89826121ef565b61113584611cab565b61113e836118ae565b611146611659565b505097509795505050505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105cd91859061095790866111c6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606107e861206a565b6201de2090565b600082820161079e84821015836113cc565b600061079e8383605561120a565b600061079e83836056611231565b60006112048383111560016113cc565b50900390565b60006001821b1984168284611220576000611223565b60015b60ff16901b17949350505050565b6001600160401b03811b1992909216911b1790565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906112a1908590614993565b60405180910390a3505050565b60006112c56000356001600160e01b031916610b1b565b90506105e86112d48233612285565b6101916113cc565b80156112fc576112f76112ed611377565b42106101936113cc565b611311565b61131161130761139b565b42106101a96113cc565b6006805460ff19168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be649061134f908390614970565b60405180910390a150565b600061136461139b565b4211806107e857505060065460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006105d182604b612375565b816113da576113da8161237d565b5050565b60006113ef824210156101386113cc565b4282900360006113fe85611a4b565b9050600061140b826123d0565b905061141c600082116101396113cc565b8281116114485780830380611431848a6123dc565b0261143c848a612420565b0194505050505061079e565b600061145387612464565b9050600061146082611a4b565b9050600061146d826123d0565b905061147e600082116101396113cc565b61148d8682111561013a6113cc565b505060008061149c8684612471565b9150915060006114ab836123d0565b6114b4836123d0565b039050801561150c5760006114c9848d612420565b6114d3848e612420565b03905060006114e1856123d0565b8903905082818302816114f057fe5b056114fb868f612420565b01995050505050505050505061079e565b611516838c612420565b97505050505050505061079e565b60006105d1655af3107a40008302612524565b6001600160a01b03831660009081526020819052604090205461155f828210156101966113cc565b6115766001600160a01b03841615156101996113cc565b6001600160a01b038085166000908152602081905260408082208585039055918516815220546115a690836111c6565b6001600160a01b0380851660008181526020819052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115f8908690614993565b60405180910390a350505050565b6107d761161161135a565b6101926113cc565b60085461162690826111d8565b6008556040517f3e350b41e86a8e10f804ade6d35340d620be35569cc75ac943e8bb14ab80ead19061134f908390614970565b600854611665816117cd565b156105e85761167f611678600954612901565b8290612945565b905061169b61169461168f6105eb565b612901565b8290612952565b60085550565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061170e612960565b306040516020016117239594939291906149ef565b60405160208183030381529060405280519060200120905090565b61175164e8d4a5100082101560cb6113cc565b61176767016345785d8a000082111560ca6113cc565b60085461177490826111e6565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc9061134f908390614993565b60006105d18282612964565b60006105d1826016612964565b60006105d182602c61298b565b60006105d1826055612995565b60006105d182605661299f565b6113da81831460676113cc565b6000606080606061180361206a565b905061180d61135a565b156118555761182387896000815181106110ea57fe5b600061182f828a6120d8565b90506118408983600954848b6129ac565b925061184f89846111f4612a90565b50611876565b60408051600280825260608201835290916020830190803683370190505091505b611881888287612b22565b909450925061189388846111f4612a90565b61189d81896120d8565b600955509750975097945050505050565b6118d5816000815181106118be57fe5b60200260200101516118d06001611d09565b612b8f565b816000815181106118e257fe5b602002602001018181525050611910816001815181106118fe57fe5b60200260200101516118d06000611d09565b8160018151811061191d57fe5b60200260200101818152505050565b3330146119ea576000306001600160a01b03166000366040516119509291906148b5565b6000604051808303816000865af19150503d806000811461198d576040519150601f19603f3d011682016040523d82523d6000602084013e611992565b606091505b5050905080600081146119a157fe5b60046000803e6000516001600160e01b0319166343adbafb60e01b81146119cc573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b6119f386611b35565b60006060611a0a8b8b8b8b8b8b8b8b63ffffffff16565b5091509150611a1c818463ffffffff16565b8051601f1982018390526343adbafb603f1983015260200260231982016044820181fd5b505050505050505050565b60009081526007602052604090205490565b6000806000806000806000611a7188612baf565b9650611a7c88612bbc565b9550611a8788612bc9565b9450611a9288612bd6565b9350611a9d88612be3565b9250611aa888612bf0565b9150611ab3886123d0565b9050919395979092949650565b600082820261079e841580611add575083858381611ada57fe5b04145b60036113cc565b6000611af382151560046113cc565b82611b00575060006105d1565b670de0b6b3a764000083810290611b2390858381611b1a57fe5b041460056113cc565b828181611b2c57fe5b049150506105d1565b611b5c81600081518110611b4557fe5b6020026020010151611b576001611d09565b611ac0565b81600081518110611b6957fe5b60200260200101818152505061191081600181518110611b8557fe5b6020026020010151611b576000611d09565b6001600160a01b038216600090815260208190526040902054611bbf828210156101966113cc565b6001600160a01b03831660009081526020819052604090208282039055600254611be990836111f4565b6002556040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112a1908690614993565b60006060806060611c3961206a565b90506000611c47828a6120d8565b90506060611c5a8a84600954858c6129ac565b9050611c698a826111f4612a90565b60006060611c788c868b612bfd565b91509150611c898c826111c6612a90565b611c93858d6120d8565b600955909e909d50909b509950505050505050505050565b611cd281600081518110611cbb57fe5b6020026020010151611ccd6001611d09565b612c57565b81600081518110611cdf57fe5b60200260200101818152505061191081600181518110611cfb57fe5b6020026020010151611ccd60005b600081611d36577f00000000000000000000000000000000000000000000000000000000000000006105d1565b507f0000000000000000000000000000000000000000000000000000000000000000919050565b600081611d8a577f00000000000000000000000000000000000000000000000000000000000000006105d1565b507f0000000000000000000000000000000000000000000000000000000000000000919050565b600061079e8383611ac0565b600854611dc9816117cd565b8015611dd457508343115b15611ebd576000611e277f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000086612c8a565b90506000611e5e7f000000000000000000000000000000000000000000000000000000000000000086611e59866117b3565b612cbf565b90506000611e6b846113bf565b90506000611e78856117c0565b90506000611e9182848787611e8c8b6117a7565b612cdb565b9050808314611a4057611ea48682612d32565b9550611eb08642612d40565b6008819055955050505050505b50505050565b6000828202611edd841580611add575083858381611ada57fe5b80611eec5760009150506105d1565b670de0b6b3a764000060001982015b046001019150506105d1565b6000611f1a858486858a60600151612d4e565b90505b95945050505050565b600061079e8383612b8f565b6000611f1a858486858a60600151612dc9565b600061079e8383612c57565b6000670de0b6b3a76400008210611f695760006105d1565b50670de0b6b3a76400000390565b6000611f8682151560046113cc565b82611f93575060006105d1565b670de0b6b3a764000083810290611fad90858381611b1a57fe5b826001820381611efb57fe5b6000611fc3610bb6565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015611ffb57600080fd5b505afa15801561200f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e89190614605565b60008061203f83611a4b565b9050612058600061204f836123d0565b116101396113cc565b61206281856123dc565b949350505050565b6040805160028082526060808301845292839291906020830190803683370190505090506120986001611d5d565b816000815181106120a557fe5b6020026020010181815250506120bb6000611d5d565b816001815181106120c857fe5b6020908102919091010152905090565b670de0b6b3a764000060005b835181101561213a576121306121298583815181106120ff57fe5b602002602001015185848151811061211357fe5b6020026020010151612e3f90919063ffffffff16565b8390612e8e565b91506001016120e4565b506105d1600082116101376113cc565b60006121546116a1565b82604051602001610b509291906148c5565b60006060600061217584612eba565b9050612190600082600281111561218857fe5b1460ce6113cc565b606061219b85612ed0565b90506121a9815160026117e7565b6121b281611b35565b60606121bc61206a565b905060006121ca82846120d8565b905060006121d9826002611ac0565b6009929092555099919850909650505050505050565b6001600160a01b03821660009081526020819052604090205461221290826111c6565b6001600160a01b03831660009081526020819052604090205560025461223890826111c6565b6002556040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612279908590614993565b60405180910390a35050565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b6122a4610b92565b6001600160a01b0316141580156122bf57506122bf83612ee6565b156122e7576122cc610b92565b6001600160a01b0316336001600160a01b03161490506105d1565b6122ef611fb9565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b815260040161231e9392919061499c565b60206040518083038186803b15801561233657600080fd5b505afa15801561234a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236e91906144c5565b90506105d1565b1c6103ff1690565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b60006105d1828261298b565b6000808260028111156123eb57fe5b14156123fa5761236e83612baf565b600182600281111561240857fe5b14156124175761236e83612bc9565b61236e83612be3565b60008082600281111561242f57fe5b141561243e5761236e83612bbc565b600182600281111561244c57fe5b141561245b5761236e83612bd6565b61236e83612bf0565b60006105d1826001612f00565b600080806103ff8180805b8385116124e857600285850104612493818a612f00565b935061249e84611a4b565b92506124a9836123d0565b9150898210156124be578060010195506124e2565b898211156124d1576001810394506124e2565b82839750975050505050505061251d565b5061247c565b888110612506576125006124fb84612f11565b611a4b565b82612513565b816125136124fb85612464565b9650965050505050505b9250929050565b6000612553680238fd42c5cf03ffff19831215801561254c575068070c1cc73b00c800008313155b60096113cc565b60008212156125865761256882600003612524565b6a0c097ce7bc90715b34b9f160241b8161257e57fe5b059050610a56565b60006806f05b59d3b200000083126125c657506806f05b59d3b1ffffff1990910190770195e54c5dd42177f53a27172fa9ec6302628270000000006125fc565b6803782dace9d900000083126125f857506803782dace9d8ffffff19909101906b1425982cf597cd205cef73806125fc565b5060015b6064929092029168056bc75e2d6310000068ad78ebc5ac62000000841261264c5768ad78ebc5ac61ffffff199093019268056bc75e2d631000006e01855144814a7ff805980ff008400082020590505b6856bc75e2d6310000008412612688576856bc75e2d630ffffff199093019268056bc75e2d631000006b02df0ab5a80a22c61ab5a70082020590505b682b5e3af16b1880000084126126c257682b5e3af16b187fffff199093019268056bc75e2d63100000693f1fce3da636ea5cf85082020590505b6815af1d78b58c40000084126126fc576815af1d78b58c3fffff199093019268056bc75e2d63100000690127fa27722cc06cc5e282020590505b680ad78ebc5ac6200000841261273557680ad78ebc5ac61fffff199093019268056bc75e2d6310000068280e60114edb805d0382020590505b68056bc75e2d63100000841261276e5768056bc75e2d630fffff199093019268056bc75e2d63100000680ebc5fb4174612111082020590505b6802b5e3af16b188000084126127a7576802b5e3af16b187ffff199093019268056bc75e2d631000006808f00f760a4b2db55d82020590505b68015af1d78b58c4000084126127e05768015af1d78b58c3ffff199093019268056bc75e2d631000006806f5f177578893793782020590505b68056bc75e2d631000008481019085906002908280020505918201919050600368056bc75e2d631000008783020505918201919050600468056bc75e2d631000008783020505918201919050600568056bc75e2d631000008783020505918201919050600668056bc75e2d631000008783020505918201919050600768056bc75e2d631000008783020505918201919050600868056bc75e2d631000008783020505918201919050600968056bc75e2d631000008783020505918201919050600a68056bc75e2d631000008783020505918201919050600b68056bc75e2d631000008783020505918201919050600c68056bc75e2d631000008783020505918201919050606468056bc75e2d63100000848402058502059695505050505050565b60008061290d83612f1e565b9050655af3107a40006000821361292c57652d79883d20008203612936565b652d79883d200082015b8161293d57fe5b059392505050565b600061079e838383612f7a565b600061079e83836016612f7a565b4690565b600082821c623fffff16621fffff811361297e5780612062565b623fffff19179392505050565b1c637fffffff1690565b1c60019081161490565b1c6001600160401b031690565b604080516002808252606080830184529283929190602083019080368337019050509050826129dc579050611f1d565b612a4f877f000000000000000000000000000000000000000000000000000000000000000081518110612a0b57fe5b6020026020010151877f000000000000000000000000000000000000000000000000000000000000000081518110612a3f57fe5b6020026020010151878787612f91565b817f000000000000000000000000000000000000000000000000000000000000000081518110612a7b57fe5b60209081029190910101529695505050505050565b612ac683600081518110612aa057fe5b602002602001015183600081518110612ab557fe5b60200260200101518363ffffffff16565b83600081518110612ad357fe5b602002602001018181525050612b0483600181518110612aef57fe5b602002602001015183600181518110612ab557fe5b83600181518110612b1157fe5b602002602001018181525050505050565b600060606000612b3184612eba565b90506000816002811115612b4157fe5b1415612b5c57612b52868686613009565b9250925050612b87565b6001816002811115612b6a57fe5b1415612b7a57612b5286856130b9565b612b528686866130eb565b505b935093915050565b6000612b9e82151560046113cc565b818381612ba757fe5b049392505050565b60006105d18260ea612964565b60006105d18260b5613157565b60006105d182609f612964565b60006105d182606a613157565b60006105d1826054612964565b60006105d182601f613157565b600060606000612c0c84612eba565b90506001816002811115612c1c57fe5b1415612c2d57612b5286868661318a565b6002816002811115612c3b57fe5b1415612c4c57612b528686866131e0565b612b8561013661237d565b6000612c6682151560046113cc565b82612c73575060006105d1565b816001840381612c7f57fe5b0460010190506105d1565b600080612caa612c9a8486611f77565b612ca48789611f77565b90611f77565b9050612cb581612901565b9695505050505050565b600080612ccf61168f8587611f77565b92909203949350505050565b600080612cf785858542612cee8b611a4b565b93929190613263565b9050607842889003101580612d0c5786612d15565b612d1587612464565b600081815260076020526040902092909255509695505050505050565b600061079e8383604b6132b5565b600061079e8383602c6132c5565b6000612d70612d6587670429d069189e0000612e8e565b8311156101306113cc565b6000612d7c87846111c6565b90506000612d8a8883611f77565b90506000612d988887611ae4565b90506000612da683836132d7565b9050612dbb612db482611f51565b8990612e8e565b9a9950505050505050505050565b6000612deb612de085670429d069189e0000612e8e565b8311156101316113cc565b6000612e01612dfa86856111f4565b8690611f77565b90506000612e0f8588611f77565b90506000612e1d83836132d7565b90506000612e3382670de0b6b3a76400006111f4565b9050612dbb8a82611ec3565b600080612e4c8484613303565b90506000612e66612e5f83612710611ec3565b60016111c6565b905080821015612e7b576000925050506105d1565b612e8582826111f4565b925050506105d1565b6000828202612ea8841580611add575083858381611ada57fe5b670de0b6b3a764000090049392505050565b6000818060200190518101906105d19190614621565b60608180602001905181019061079e91906146e6565b6000612ef8631c74c91760e11b610b1b565b909114919050565b60006104008383015b069392505050565b60006105d1826001613404565b6000612f2e6000831360646113cc565b670c7d713b49da000082138015612f4c5750670f43fc2c04ee000082125b15612f6a57670de0b6b3a7640000612f6383613413565b8161257e57fe5b612f7382613531565b9050610a56565b623fffff828116821b90821b198416179392505050565b6000838311612fa257506000611f1d565b6000612fae8585611f77565b90506000612fc4670de0b6b3a764000088611ae4565b9050612fd8826709b6e64a8ec600006138d0565b91506000612fe683836132d7565b90506000612ffd612ff683611f51565b8b90612e8e565b9050612dbb8187612e8e565b60006060613015611606565b600080613021856138e7565b915091506130336002821060646113cc565b604080516002808252606080830184529260208301908036833701905050905061309488838151811061306257fe5b602002602001015188848151811061307657fe5b6020026020010151856130876105eb565b61308f610885565b613909565b8183815181106130a057fe5b6020908102919091010152919791965090945050505050565b6000606060006130c8846139c0565b905060606130de86836130d96105eb565b6139d6565b9196919550909350505050565b600060606130f7611606565b6060600061310485613a87565b91509150613114825160026117e7565b61311d82611b35565b600061313a88888561312d6105eb565b613135610885565b613a9f565b905061314a8282111560cf6113cc565b9791965090945050505050565b600082821c661fffffffffffff16660fffffffffffff81136131795780612062565b661fffffffffffff19179392505050565b6000606080600061319a85613a87565b915091506131aa825160026117e7565b6131b382611b35565b60006131d08888856131c36105eb565b6131cb610885565b613cca565b905061314a8282101560d06113cc565b600060606000806131f0856138e7565b915091506132026002821060646113cc565b604080516002808252606080830184529260208301908036833701905050905061309488838151811061323157fe5b602002602001015188848151811061324557fe5b6020026020010151856132566105eb565b61325e610885565b613eda565b60008061326f876123d0565b83039050600081870261328189612bbc565b01905060008287026132928a612bd6565b01905060008387026132a38b612bf0565b019050612dbb89848a858b868c613f7c565b6103ff811b1992909216911b1790565b637fffffff811b1992909216911b1790565b6000806132e48484613303565b905060006132f7612e5f83612710611ec3565b9050611f1d82826111c6565b6000816133195750670de0b6b3a76400006105d1565b82613326575060006105d1565b613337600160ff1b841060066113cc565b8261335d770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532841060076113cc565b826000670c7d713b49da00008313801561337e5750670f43fc2c04ee000083125b156133b557600061338e84613413565b9050670de0b6b3a764000080820784020583670de0b6b3a7640000830502019150506133c3565b816133bf84613531565b0290505b670de0b6b3a764000090056133fb680238fd42c5cf03ffff1982128015906133f4575068070c1cc73b00c800008213155b60086113cc565b612cb581612524565b60006104008284038101612f09565b670de0b6b3a7640000026000806a0c097ce7bc90715b34b9f160241b808401906ec097ce7bc90715b34b9f0fffffffff198501028161344e57fe5b05905060006a0c097ce7bc90715b34b9f160241b82800205905081806a0c097ce7bc90715b34b9f160241b81840205915060038205016a0c097ce7bc90715b34b9f160241b82840205915060058205016a0c097ce7bc90715b34b9f160241b82840205915060078205016a0c097ce7bc90715b34b9f160241b82840205915060098205016a0c097ce7bc90715b34b9f160241b828402059150600b8205016a0c097ce7bc90715b34b9f160241b828402059150600d8205016a0c097ce7bc90715b34b9f160241b828402059150600f826002919005919091010295945050505050565b6000670de0b6b3a764000082121561356d57613563826a0c097ce7bc90715b34b9f160241b8161355d57fe5b05613531565b6000039050610a56565b60007e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c000000000000083126135be57770195e54c5dd42177f53a27172fa9ec630262827000000000830592506806f05b59d3b2000000015b73011798004d755d3c8bc8e03204cf44619e00000083126135f6576b1425982cf597cd205cef7380830592506803782dace9d9000000015b606492830292026e01855144814a7ff805980ff0084000831261363e576e01855144814a7ff805980ff008400068056bc75e2d63100000840205925068ad78ebc5ac62000000015b6b02df0ab5a80a22c61ab5a7008312613679576b02df0ab5a80a22c61ab5a70068056bc75e2d6310000084020592506856bc75e2d631000000015b693f1fce3da636ea5cf85083126136b057693f1fce3da636ea5cf85068056bc75e2d631000008402059250682b5e3af16b18800000015b690127fa27722cc06cc5e283126136e757690127fa27722cc06cc5e268056bc75e2d6310000084020592506815af1d78b58c400000015b68280e60114edb805d03831261371c5768280e60114edb805d0368056bc75e2d631000008402059250680ad78ebc5ac6200000015b680ebc5fb41746121110831261374757680ebc5fb4174612111068056bc75e2d631000009384020592015b6808f00f760a4b2db55d831261377c576808f00f760a4b2db55d68056bc75e2d6310000084020592506802b5e3af16b1880000015b6806f5f177578893793783126137b1576806f5f177578893793768056bc75e2d63100000840205925068015af1d78b58c40000015b6806248f33704b28660383126137e5576806248f33704b28660368056bc75e2d63100000840205925067ad78ebc5ac620000015b6805c548670b9510e7ac8312613819576805c548670b9510e7ac68056bc75e2d6310000084020592506756bc75e2d6310000015b600068056bc75e2d63100000840168056bc75e2d63100000808603028161383c57fe5b059050600068056bc75e2d63100000828002059050818068056bc75e2d63100000818402059150600382050168056bc75e2d63100000828402059150600582050168056bc75e2d63100000828402059150600782050168056bc75e2d63100000828402059150600982050168056bc75e2d63100000828402059150600b820501600202606485820105979650505050505050565b6000818310156138e0578161079e565b5090919050565b600080828060200190518101906138fe91906146b0565b909590945092505050565b60008061391a84612ca481886111f4565b90506139336709b6e64a8ec600008210156101326113cc565b600061395161394a670de0b6b3a764000089611ae4565b83906132d7565b9050600061396861396183611f51565b8a90612e8e565b9050600061397589611f51565b905060006139838383611ec3565b9050600061399184836111f4565b90506139b06139a96139a28a611f51565b8490612e8e565b82906111c6565b9c9b505050505050505050505050565b60008180602001905181019061079e9190614683565b606060006139e48484611ae4565b9050606085516001600160401b03811180156139ff57600080fd5b50604051908082528060200260200182016040528015613a29578160200160208202803683370190505b50905060005b8651811015613a7d57613a5e83888381518110613a4857fe5b6020026020010151612e8e90919063ffffffff16565b828281518110613a6a57fe5b6020908102919091010152600101613a2f565b5095945050505050565b60606000828060200190518101906138fe919061463d565b6000606084516001600160401b0381118015613aba57600080fd5b50604051908082528060200260200182016040528015613ae4578160200160208202803683370190505b5090506000805b8851811015613ba957613b44898281518110613b0357fe5b6020026020010151612ca4898481518110613b1a57fe5b60200260200101518c8581518110613b2e57fe5b60200260200101516111f490919063ffffffff16565b838281518110613b5057fe5b602002602001018181525050613b9f613b98898381518110613b6e57fe5b6020026020010151858481518110613b8257fe5b6020026020010151611ec390919063ffffffff16565b83906111c6565b9150600101613aeb565b50670de0b6b3a764000060005b8951811015613ca9576000848281518110613bcd57fe5b6020026020010151841115613c2b576000613bf6613bea86611f51565b8d8581518110613a4857fe5b90506000613c0a828c8681518110613b2e57fe5b9050613c22613b98613c1b8b611f51565b8390611f77565b92505050613c42565b888281518110613c3757fe5b602002602001015190505b6000613c6b8c8481518110613c5357fe5b6020026020010151610985848f8781518110613b2e57fe5b9050613c9d613c968c8581518110613c7f57fe5b602002602001015183612e3f90919063ffffffff16565b8590612e8e565b93505050600101613bb6565b50613cbd613cb682611f51565b8790611ec3565b9998505050505050505050565b6000606084516001600160401b0381118015613ce557600080fd5b50604051908082528060200260200182016040528015613d0f578160200160208202803683370190505b5090506000805b8851811015613db757613d6f898281518110613d2e57fe5b6020026020010151610985898481518110613d4557fe5b60200260200101518c8581518110613d5957fe5b60200260200101516111c690919063ffffffff16565b838281518110613d7b57fe5b602002602001018181525050613dad613b98898381518110613d9957fe5b6020026020010151858481518110613a4857fe5b9150600101613d16565b50670de0b6b3a764000060005b8951811015613e9857600083858381518110613ddc57fe5b60200260200101511115613e38576000613e01613bea86670de0b6b3a76400006111f4565b90506000613e15828c8681518110613b2e57fe5b9050613e2f613b98612129670de0b6b3a76400008c6111f4565b92505050613e4f565b888281518110613e4457fe5b602002602001015190505b6000613e788c8481518110613e6057fe5b6020026020010151610985848f8781518110613d5957fe5b9050613e8c613c968c8581518110613c7f57fe5b93505050600101613dc4565b50670de0b6b3a76400008110613ece57613ec4613ebd82670de0b6b3a76400006111f4565b8790612e8e565b9350505050611f1d565b60009350505050611f1d565b600080613eeb84612ca481886111c6565b9050613f046729a2241af62c00008211156101336113cc565b6000613f1b61394a670de0b6b3a764000089611f77565b90506000613f3b613f3483670de0b6b3a76400006111f4565b8a90611ec3565b90506000613f4889611f51565b90506000613f568383611ec3565b90506000613f6484836111f4565b90506139b06139a9613f758a611f51565b8490611f77565b6000613f888282613fdc565b613f9384601f613fe0565b613f9e866054613ff1565b613fa988606a613fe0565b613fb48a609f613ff1565b613fbf8c60b5613fe0565b613fca8e60ea613ff1565b17171717171798975050505050505050565b1b90565b661fffffffffffff91909116901b90565b623fffff91909116901b90565b6040805160608101909152806000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b80356105d181614b52565b600082601f830112614052578081fd5b815161406561406082614b33565b614b0d565b81815291506020808301908481018184028601820187101561408657600080fd5b60005b848110156140a557815184529282019290820190600101614089565b505050505092915050565b600082601f8301126140c0578081fd5b81356001600160401b038111156140d5578182fd5b6140e8601f8201601f1916602001614b0d565b91508082528360208285010111156140ff57600080fd5b8060208401602084013760009082016020015292915050565b8035600281106105d157600080fd5b80356105d181614b75565b600060208284031215614143578081fd5b813561079e81614b52565b60008060408385031215614160578081fd5b823561416b81614b52565b9150602083013561417b81614b52565b809150509250929050565b60008060006060848603121561419a578081fd5b83356141a581614b52565b925060208401356141b581614b52565b929592945050506040919091013590565b600080600080600080600060e0888a0312156141e0578485fd5b87356141eb81614b52565b965060208801356141fb81614b52565b95506040880135945060608801359350608088013560ff8116811461421e578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561424d578182fd5b823561425881614b52565b946020939093013593505050565b60008060006060848603121561427a578081fd5b83516001600160401b0380821115614290578283fd5b818601915086601f8301126142a3578283fd5b81516142b161406082614b33565b80828252602080830192508086018b8283870289010111156142d1578788fd5b8796505b848710156142fc5780516142e881614b52565b8452600196909601959281019281016142d5565b508901519097509350505080821115614313578283fd5b5061432086828701614042565b925050604084015190509250925092565b60006020808385031215614343578182fd5b82356001600160401b03811115614358578283fd5b8301601f81018513614368578283fd5b803561437661406082614b33565b818152838101908385016040808502860187018a1015614394578788fd5b8795505b848610156143e15780828b0312156143ae578788fd5b6143b781614b0d565b6143c18b84614127565b815282880135888201528452600195909501949286019290810190614398565b509098975050505050505050565b60006020808385031215614401578182fd5b82356001600160401b03811115614416578283fd5b8301601f81018513614426578283fd5b803561443461406082614b33565b818152838101908385016060808502860187018a1015614452578788fd5b8795505b848610156143e15780828b03121561446c578788fd5b61447581614b0d565b61447f8b84614127565b81528288013588820152604080840135908201528452600195909501949286019290810190614456565b6000602082840312156144ba578081fd5b813561079e81614b67565b6000602082840312156144d6578081fd5b815161079e81614b67565b600080600080600080600060e0888a0312156144fb578081fd5b8735965060208089013561450e81614b52565b9650604089013561451e81614b52565b955060608901356001600160401b0380821115614539578384fd5b818b0191508b601f83011261454c578384fd5b813561455a61406082614b33565b8082825285820191508585018f878886028801011115614578578788fd5b8795505b8386101561459a57803583526001959095019491860191860161457c565b509850505060808b0135955060a08b0135945060c08b01359250808311156145c0578384fd5b50506145ce8a828b016140b0565b91505092959891949750929550565b6000602082840312156145ee578081fd5b81356001600160e01b03198116811461079e578182fd5b600060208284031215614616578081fd5b815161079e81614b52565b600060208284031215614632578081fd5b815161079e81614b75565b600080600060608486031215614651578081fd5b835161465c81614b75565b60208501519093506001600160401b03811115614677578182fd5b61432086828701614042565b60008060408385031215614695578182fd5b82516146a081614b75565b6020939093015192949293505050565b6000806000606084860312156146c4578081fd5b83516146cf81614b75565b602085015160409095015190969495509392505050565b600080604083850312156146f8578182fd5b825161470381614b75565b60208401519092506001600160401b0381111561471e578182fd5b61472a85828601614042565b9150509250929050565b600060208284031215614745578081fd5b813561079e81614b75565b600080600060608486031215614764578081fd5b83356001600160401b038082111561477a578283fd5b8186019150610120808389031215614790578384fd5b61479981614b0d565b90506147a58884614118565b81526147b48860208501614037565b60208201526147c68860408501614037565b6040820152606083013560608201526080830135608082015260a083013560a08201526147f68860c08501614037565b60c08201526148088860e08501614037565b60e08201526101008084013583811115614820578586fd5b61482c8a8287016140b0565b9183019190915250976020870135975060409096013595945050505050565b60006020828403121561485c578081fd5b5035919050565b6000815180845260208085019450808401835b8381101561489257815187529582019590820190600101614876565b509495945050505050565b9182526001600160e01b031916602082015260240190565b6000828483379101908152919050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b8181101561492c57835183529284019291840191600101614910565b50909695505050505050565b60006020825261079e6020830184614863565b60006040825261495e6040830185614863565b8281036020840152611f1d8185614863565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b9586526020860194909452604085019290925260608401521515608083015260a082015260c00190565b6000602080835283518082850152825b81811015614abf57858101830151858201604001528201614aa3565b81811115614ad05783604083870101525b50601f01601f1916929092016040019392505050565b6000838252604060208301526120626040830184614863565b60ff91909116815260200190565b6040518181016001600160401b0381118282101715614b2b57600080fd5b604052919050565b60006001600160401b03821115614b48578081fd5b5060209081020190565b6001600160a01b03811681146105e857600080fd5b80151581146105e857600080fd5b600381106105e857600080fdfea26469706673582212201dbf8d364d926088a19c5f3f5d0ca0ab72cf3eda8f3f78dda45ab2619de4b6d664736f6c63430007010033a264697066735822122062c63a2c3089490a939fe9f20e0e99ef310f04a393c33a92c66f45a3b2cea18064736f6c63430007010033",
+ "_disabled": [
{
"inputs": [],
"name": "getPauseConfiguration",
@@ -123,6 +126,5 @@
"stateMutability": "view",
"type": "function"
}
- ],
- "bytecode": "0x60c060405234801561001057600080fd5b50604051615fe1380380615fe183398101604081905261002f9161004d565b60601b6001600160601b0319166080526276a700420160a05261007b565b60006020828403121561005e578081fd5b81516001600160a01b0381168114610074578182fd5b9392505050565b60805160601c60a051615f3b6100a660003980610221528061024b5250806102a75250615f3b6000f3fe60806040523480156200001157600080fd5b5060043610620000525760003560e01c80631596019b14620000575780632da47c4014620000865780636634b75314620000a05780638d928af814620000c6575b600080fd5b6200006e6200006836600462000548565b620000d0565b6040516200007d91906200068f565b60405180910390f35b620000906200021b565b6040516200007d929190620007a2565b620000b7620000b136600462000522565b62000287565b6040516200007d9190620006a3565b6200006e620002a5565b6000806000620000df6200021b565b91509150620000ed62000315565b60405180610180016040528062000103620002a5565b6001600160a01b031681526020018c81526020018b81526020018a6000815181106200012b57fe5b60200260200101516001600160a01b031681526020018a6001815181106200014f57fe5b60200260200101516001600160a01b03168152602001896000815181106200017357fe5b60200260200101518152602001896001815181106200018e57fe5b602002602001015181526020018881526020018481526020018381526020018715158152602001866001600160a01b03168152509050600081604051620001d5906200039c565b620001e19190620006ae565b604051809103906000f080158015620001fe573d6000803e3d6000fd5b5090506200020c81620002c9565b9b9a5050505050505050505050565b600080427f00000000000000000000000000000000000000000000000000000000000000008110156200027957807f000000000000000000000000000000000000000000000000000000000000000003925062278d00915062000282565b60009250600091505b509091565b6001600160a01b031660009081526020819052604090205460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc9190a250565b60405180610180016040528060006001600160a01b03168152602001606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160006001600160a01b031681525090565b6156f3806200081383390190565b8035620003b781620007f9565b92915050565b600082601f830112620003ce578081fd5b8135620003e5620003df82620007d8565b620007b0565b8181529150602080830190848101818402860182018710156200040757600080fd5b60005b84811015620004335781356200042081620007f9565b845292820192908201906001016200040a565b505050505092915050565b600082601f8301126200044f578081fd5b813562000460620003df82620007d8565b8181529150602080830190848101818402860182018710156200048257600080fd5b60005b84811015620004335781358452928201929082019060010162000485565b80358015158114620003b757600080fd5b600082601f830112620004c5578081fd5b813567ffffffffffffffff811115620004dc578182fd5b620004f1601f8201601f1916602001620007b0565b91508082528360208285010111156200050957600080fd5b8060208401602084013760009082016020015292915050565b60006020828403121562000534578081fd5b81356200054181620007f9565b9392505050565b600080600080600080600060e0888a03121562000563578283fd5b873567ffffffffffffffff808211156200057b578485fd5b620005898b838c01620004b4565b985060208a01359150808211156200059f578485fd5b620005ad8b838c01620004b4565b975060408a0135915080821115620005c3578485fd5b620005d18b838c01620003bd565b965060608a0135915080821115620005e7578485fd5b50620005f68a828b016200043e565b945050608088013592506200060f8960a08a01620004a3565b9150620006208960c08a01620003aa565b905092959891949750929550565b6001600160a01b03169052565b15159052565b60008151808452815b8181101562000668576020818501810151868301820152016200064a565b818111156200067a5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b600060208252620006c46020830184516200062e565b6020830151610180806040850152620006e26101a085018362000641565b91506040850151601f1985840301606086015262000701838262000641565b92505060608501516200071860808601826200062e565b5060808501516200072d60a08601826200062e565b5060a085015160c085015260c085015160e085015260e085015161010081818701528087015191505061012081818701528087015191505061014081818701528087015191505061016062000785818701836200063b565b860151905062000798858301826200062e565b5090949350505050565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715620007d057600080fd5b604052919050565b600067ffffffffffffffff821115620007ef578081fd5b5060209081020190565b6001600160a01b03811681146200080f57600080fd5b5056fe6102a06040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120523480156200003757600080fd5b50604051620056f3380380620056f38339810160408190526200005a916200080c565b61010081810151610120830151602080850151604080870151815180830190925260018252603160f81b8285019081526101608901513360805260601b6001600160601b03191660a052835194840194852060c052915190912060e0527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f909552805193949293909291620000f391600391906200069f565b508051620001099060049060208401906200069f565b50620001219150506276a7008311156101946200040a565b6200013562278d008211156101956200040a565b4290910161014081815291016101605281015162000153906200041f565b60e081015162000163906200047b565b80516040516309b2760f60e01b81526000916001600160a01b0316906309b2760f90620001969060029060040162000a12565b602060405180830381600087803b158015620001b157600080fd5b505af1158015620001c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ec9190620007f3565b6040805160028082526060808301845293945090916020830190803683370190505090508260600151816000815181106200022357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508260800151816001815181106200025657fe5b6001600160a01b0392831660209182029290920101528351166366a9c7d283836002604051908082528060200260200182016040528015620002a2578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401620002c39392919062000976565b600060405180830381600087803b158015620002de57600080fd5b505af1158015620002f3573d6000803e3d6000fd5b505084516001600160601b0319606091821b8116610180526101a08690528187018051831b82166101c052608088015190921b166101e052516200033a92509050620004f9565b6102605260808301516200034e90620004f9565b6102805260a08301516200036f90662386f26fc10000111561012e6200040a565b62000391662386f26fc100008460c00151101561012e6200040a60201b60201c565b6000620003b58460c001518560a001516200059b60201b620011c61790919060201c565b9050620003cf670de0b6b3a764000082146101346200040a565b60a0840180516102005260c085018051610220525190511015620003f5576001620003f8565b60005b60ff16610240525062000a6392505050565b816200041b576200041b81620005b8565b5050565b6200043b816008546200060b60201b620011d81790919060201c565b6008556040517f3e350b41e86a8e10f804ade6d35340d620be35569cc75ac943e8bb14ab80ead190620004709083906200096b565b60405180910390a150565b6200049064e8d4a5100082101560cb6200040a565b620004a867016345785d8a000082111560ca6200040a565b620004c4816008546200062a60201b620011e61790919060201c565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906200047090839062000a27565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200053657600080fd5b505afa1580156200054b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000571919062000948565b60ff1690506000620005906012836200064960201b620011f41760201c565b600a0a949350505050565b6000828201620005af84821015836200040a565b90505b92915050565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b6000620005af826055856200066160201b6200120a179092919060201c565b6000620005af826056856200068a60201b62001231179092919060201c565b60006200065b8383111560016200040a565b50900390565b60006001821b1984168284620006795760006200067c565b60015b60ff16901b17949350505050565b6001600160401b03811b1992909216911b1790565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006e257805160ff191683800117855562000712565b8280016001018555821562000712579182015b8281111562000712578251825591602001919060010190620006f5565b506200072092915062000724565b5090565b5b8082111562000720576000815560010162000725565b80516001600160a01b0381168114620005b257600080fd5b80518015158114620005b257600080fd5b600082601f83011262000775578081fd5b81516001600160401b038111156200078b578182fd5b6020620007a1601f8301601f1916820162000a30565b92508183528481838601011115620007b857600080fd5b60005b82811015620007d8578481018201518482018301528101620007bb565b82811115620007ea5760008284860101525b50505092915050565b60006020828403121562000805578081fd5b5051919050565b6000602082840312156200081e578081fd5b81516001600160401b038082111562000835578283fd5b81840191506101808083870312156200084c578384fd5b620008578162000a30565b90506200086586846200073b565b815260208301518281111562000879578485fd5b620008878782860162000764565b6020830152506040830151828111156200089f578485fd5b620008ad8782860162000764565b604083015250620008c286606085016200073b565b6060820152620008d686608085016200073b565b608082015260a0838101519082015260c0808401519082015260e08084015190820152610100808401519082015261012080840151908201526101409150620009228683850162000753565b82820152610160915062000939868385016200073b565b91810191909152949350505050565b6000602082840312156200095a578081fd5b815160ff81168114620005af578182fd5b901515815260200190565b60006060820185835260206060818501528186518084526080860191508288019350845b81811015620009c257620009af855162000a57565b835293830193918301916001016200099a565b505084810360408601528551808252908201925081860190845b8181101562000a0457620009f1835162000a57565b85529383019391830191600101620009dc565b509298975050505050505050565b602081016003831062000a2157fe5b91905290565b90815260200190565b6040518181016001600160401b038111828210171562000a4f57600080fd5b604052919050565b6001600160a01b031690565b60805160a05160601c60c05160e051610100516101205161014051610160516101805160601c6101a0516101c05160601c6101e05160601c6102005161022051610240516102605161028051614bb862000b3b60003980611d12525080611d395250806129e25280612a165280612a52525080611d665280611e02525080611d8d5280611de05280611e3052505080610c6a525080610808525080610bb852508061139d525080611379525080610f205250806116a55250806116e75250806116c6525080610b94525080610b1f5250614bb86000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806374f3b0091161013b578063aaabadc5116100b8578063d5c096c41161007c578063d5c096c4146104e1578063d73dd623146104f4578063dd62ed3e14610507578063f89f27ed1461051a578063ffd088eb1461052257610248565b8063aaabadc5146104a3578063b10be739146104ab578063b48b5b40146104be578063c0ff1a15146104c6578063d505accf146104ce57610248565b80638d928af8116100ff5780638d928af81461046557806395d89b411461046d5780639b02cdde146104755780639d2c110c1461047d578063a9059cbb1461049057610248565b806374f3b009146103f65780637ecebe0014610417578063851c1bb31461042a57806387ec68171461043d578063893d20e81461045057610248565b806338e9922e116101c957806360d1507c1161018d57806360d1507c1461038257806366188463146103a8578063679aefce146103bb5780636b843239146103c357806370a08231146103e357610248565b806338e9922e1461032457806338fff2d0146103375780634a6b0b151461033f57806355c67628146103595780636028bfd41461036157610248565b80631dccd830116102105780631dccd830146102cc57806323b872dd146102ec578063292c914a146102ff578063313ce567146103075780633644e5151461031c57610248565b806306fdde031461024d578063095ea7b31461026b57806316c38b3c1461028b57806318160ddd146102a05780631c0de051146102b5575b600080fd5b61025561052a565b6040516102629190614a93565b60405180910390f35b61027e61027936600461423b565b6105c0565b6040516102629190614970565b61029e6102993660046144a9565b6105d7565b005b6102a86105eb565b6040516102629190614993565b6102bd6105f1565b6040516102629392919061497b565b6102df6102da3660046143ef565b61061a565b6040516102629190614938565b61027e6102fa366004614186565b610722565b61029e6107a5565b61030f6107d9565b6040516102629190614aff565b6102a86107de565b61029e61033236600461484b565b6107ed565b6102a8610806565b61034761082a565b60405161026296959493929190614a69565b6102a8610885565b61037461036f3660046144e1565b610892565b604051610262929190614ae6565b61039561039036600461484b565b6108c3565b6040516102629796959493929190614a39565b61027e6103b636600461423b565b61090c565b6102a8610966565b6103d66103d1366004614331565b61098b565b60405161026291906148f4565b6102a86103f1366004614132565b610a3c565b6104096104043660046144e1565b610a5b565b60405161026292919061494b565b6102a8610425366004614132565b610b00565b6102a86104383660046145dd565b610b1b565b61037461044b3660046144e1565b610b6d565b610458610b92565b60405161026291906148e0565b610458610bb6565b610255610bda565b6102a8610c3b565b6102a861048b366004614750565b610c41565b61027e61049e36600461423b565b610df0565b610458610dfd565b6102a86104b9366004614734565b610e07565b6102a8610e29565b6102a8610e2f565b61029e6104dc3660046141c6565b610eeb565b6104096104ef3660046144e1565b611034565b61027e61050236600461423b565b611154565b6102a861051536600461414e565b61118a565b6102df6111b5565b6102a86111bf565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105b65780601f1061058b576101008083540402835291602001916105b6565b820191906000526020600020905b81548152906001019060200180831161059957829003601f168201915b5050505050905090565b60006105cd338484611246565b5060015b92915050565b6105df6112ae565b6105e8816112dc565b50565b60025490565b60008060006105fe61135a565b159250610609611377565b915061061361139b565b9050909192565b606081516001600160401b038111801561063357600080fd5b5060405190808252806020026020018201604052801561065d578160200160208202803683370190505b509050600061066d6008546113bf565b9050610677613ffe565b60005b845181101561071a5784818151811061068f57fe5b602002602001015191506106ad82602001516000141561013c6113cc565b60006106c883600001518585602001518660400151016113de565b905060006106df84600001518686604001516113de565b90506106f98460200151838303816106f357fe5b05611524565b86848151811061070557fe5b6020908102919091010152505060010161067a565b505050919050565b6001600160a01b038316600081815260016020908152604080832033808552925282205491926107609114806107585750838210155b6101976113cc565b61076b858585611537565b336001600160a01b0386161480159061078657506000198114155b15610798576107988533858403611246565b60019150505b9392505050565b6107ad611606565b6107b56112ae565b6107bf6001611619565b60006107c96105eb565b11156107d7576107d7611659565b565b601290565b60006107e86116a1565b905090565b6107f56112ae565b6107fd611606565b6105e88161173e565b7f000000000000000000000000000000000000000000000000000000000000000090565b60008060008060008060006008549050610843816117a7565b965061084e816117b3565b9550610859816117c0565b9450610864816113bf565b935061086f816117cd565b925061087a816117da565b915050909192939495565b60006107e86008546117da565b600060606108a2865160026117e7565b6108b7898989898989896117f46118ae61192c565b97509795505050505050565b60008060008060008060006108de610400891061013b6113cc565b60006108e989611a4b565b90506108f481611a5d565b959f949e50929c50909a509850965090945092505050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548083106109485761094333856000611246565b61095c565b61095c338561095784876111f4565b611246565b5060019392505050565b60006107e86109736105eb565b61098561097e610e2f565b6002611ac0565b90611ae4565b606081516001600160401b03811180156109a457600080fd5b506040519080825280602002602001820160405280156109ce578160200160208202803683370190505b50905060006109de6008546113bf565b90506109e8614020565b60005b845181101561071a57848181518110610a0057fe5b60200260200101519150610a1d82600001518484602001516113de565b848281518110610a2957fe5b60209081029190910101526001016109eb565b6001600160a01b0381166000908152602081905260409020545b919050565b60608088610a85610a6a610bb6565b6001600160a01b0316336001600160a01b03161460cd6113cc565b610a9a610a90610806565b82146101f46113cc565b610aa387611b35565b6000606080610ab78d8d8d8d8d8d8d6117f4565b925092509250610ac78c84611b97565b610ad0826118ae565b610ad9816118ae565b610ae161135a565b15610aee57610aee611659565b909c909b509950505050505050505050565b6001600160a01b031660009081526005602052604090205490565b60007f000000000000000000000000000000000000000000000000000000000000000082604051602001610b5092919061489d565b604051602081830303815290604052805190602001209050919050565b60006060610b7d865160026117e7565b6108b789898989898989611c2a611cab61192c565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105b65780601f1061058b576101008083540402835291602001916105b6565b60095490565b6000610c4b611606565b8360800151610c5b610a6a610bb6565b610c66610a90610806565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686602001516001600160a01b03161490506000610cae82611d09565b90506000610cbc8315611d09565b90506000610cc984611d5d565b90506000610cd78515611d5d565b9050610ce38985611db1565b9850610cef8884611db1565b9750610d188a60a0015186610d045789610d06565b8a5b87610d11578b610d13565b8a5b611dbd565b60008a516001811115610d2757fe5b1415610d95576000610d45610d3a610885565b60608d015190611ec3565b9050610d67610d61828d606001516111f490919063ffffffff16565b86611db1565b60608c01526000610d7b8c8c8c8787611f07565b9050610d878186611f26565b985050505050505050610de8565b610da38a6060015184611db1565b60608b01526000610db78b8b8b8686611f32565b9050610dc38186611f45565b9050610ddf610dd8610dd3610885565b611f51565b8290611f77565b97505050505050505b509392505050565b60006105cd338484611537565b60006107e8611fb9565b600080610e1e83610e196008546113bf565b612033565b905061079e81611524565b61040090565b60006060610e3b610bb6565b6001600160a01b031663f94d4668610e51610806565b6040518263ffffffff1660e01b8152600401610e6d9190614993565b60006040518083038186803b158015610e8557600080fd5b505afa158015610e99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ec19190810190614266565b50915050610ece81611b35565b6060610ed861206a565b9050610ee481836120d8565b9250505090565b610ef98442111560d16113cc565b6001600160a01b0387166000908152600560209081526040808320549051909291610f50917f0000000000000000000000000000000000000000000000000000000000000000918c918c918c9188918d91016149bb565b6040516020818303038152906040528051906020012090506000610f738261214a565b9050600060018288888860405160008152602001604052604051610f9a9493929190614a1b565b6020604051602081039080840390855afa158015610fbc573d6000803e3d6000fd5b5050604051601f1901519150610ffe90506001600160a01b03821615801590610ff657508b6001600160a01b0316826001600160a01b0316145b6101f86113cc565b6001600160a01b038b1660009081526005602052604090206001850190556110278b8b8b611246565b5050505050505050505050565b60608088611043610a6a610bb6565b61104e610a90610806565b611056611606565b60006110606105eb565b6110d0576110708b8b8b88612166565b94509050611085620f424082101560cc6113cc565b6110936000620f42406121ef565b6110a289620f424083036121ef565b6110ab84611cab565b604080516002808252606082018352909160208301908036833701905050925061113e565b6110d988611b35565b61110c87896000815181106110ea57fe5b60200260200101518a6001815181106110ff57fe5b6020026020010151611dbd565b61111b8b8b8b8b8b8b8b611c2a565b9095509350905061112c89826121ef565b61113584611cab565b61113e836118ae565b611146611659565b505097509795505050505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105cd91859061095790866111c6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606107e861206a565b6201de2090565b600082820161079e84821015836113cc565b600061079e8383605561120a565b600061079e83836056611231565b60006112048383111560016113cc565b50900390565b60006001821b1984168284611220576000611223565b60015b60ff16901b17949350505050565b6001600160401b03811b1992909216911b1790565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906112a1908590614993565b60405180910390a3505050565b60006112c56000356001600160e01b031916610b1b565b90506105e86112d48233612285565b6101916113cc565b80156112fc576112f76112ed611377565b42106101936113cc565b611311565b61131161130761139b565b42106101a96113cc565b6006805460ff19168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be649061134f908390614970565b60405180910390a150565b600061136461139b565b4211806107e857505060065460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006105d182604b612375565b816113da576113da8161237d565b5050565b60006113ef824210156101386113cc565b4282900360006113fe85611a4b565b9050600061140b826123d0565b905061141c600082116101396113cc565b8281116114485780830380611431848a6123dc565b0261143c848a612420565b0194505050505061079e565b600061145387612464565b9050600061146082611a4b565b9050600061146d826123d0565b905061147e600082116101396113cc565b61148d8682111561013a6113cc565b505060008061149c8684612471565b9150915060006114ab836123d0565b6114b4836123d0565b039050801561150c5760006114c9848d612420565b6114d3848e612420565b03905060006114e1856123d0565b8903905082818302816114f057fe5b056114fb868f612420565b01995050505050505050505061079e565b611516838c612420565b97505050505050505061079e565b60006105d1655af3107a40008302612524565b6001600160a01b03831660009081526020819052604090205461155f828210156101966113cc565b6115766001600160a01b03841615156101996113cc565b6001600160a01b038085166000908152602081905260408082208585039055918516815220546115a690836111c6565b6001600160a01b0380851660008181526020819052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115f8908690614993565b60405180910390a350505050565b6107d761161161135a565b6101926113cc565b60085461162690826111d8565b6008556040517f3e350b41e86a8e10f804ade6d35340d620be35569cc75ac943e8bb14ab80ead19061134f908390614970565b600854611665816117cd565b156105e85761167f611678600954612901565b8290612945565b905061169b61169461168f6105eb565b612901565b8290612952565b60085550565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061170e612960565b306040516020016117239594939291906149ef565b60405160208183030381529060405280519060200120905090565b61175164e8d4a5100082101560cb6113cc565b61176767016345785d8a000082111560ca6113cc565b60085461177490826111e6565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc9061134f908390614993565b60006105d18282612964565b60006105d1826016612964565b60006105d182602c61298b565b60006105d1826055612995565b60006105d182605661299f565b6113da81831460676113cc565b6000606080606061180361206a565b905061180d61135a565b156118555761182387896000815181106110ea57fe5b600061182f828a6120d8565b90506118408983600954848b6129ac565b925061184f89846111f4612a90565b50611876565b60408051600280825260608201835290916020830190803683370190505091505b611881888287612b22565b909450925061189388846111f4612a90565b61189d81896120d8565b600955509750975097945050505050565b6118d5816000815181106118be57fe5b60200260200101516118d06001611d09565b612b8f565b816000815181106118e257fe5b602002602001018181525050611910816001815181106118fe57fe5b60200260200101516118d06000611d09565b8160018151811061191d57fe5b60200260200101818152505050565b3330146119ea576000306001600160a01b03166000366040516119509291906148b5565b6000604051808303816000865af19150503d806000811461198d576040519150601f19603f3d011682016040523d82523d6000602084013e611992565b606091505b5050905080600081146119a157fe5b60046000803e6000516001600160e01b0319166343adbafb60e01b81146119cc573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b6119f386611b35565b60006060611a0a8b8b8b8b8b8b8b8b63ffffffff16565b5091509150611a1c818463ffffffff16565b8051601f1982018390526343adbafb603f1983015260200260231982016044820181fd5b505050505050505050565b60009081526007602052604090205490565b6000806000806000806000611a7188612baf565b9650611a7c88612bbc565b9550611a8788612bc9565b9450611a9288612bd6565b9350611a9d88612be3565b9250611aa888612bf0565b9150611ab3886123d0565b9050919395979092949650565b600082820261079e841580611add575083858381611ada57fe5b04145b60036113cc565b6000611af382151560046113cc565b82611b00575060006105d1565b670de0b6b3a764000083810290611b2390858381611b1a57fe5b041460056113cc565b828181611b2c57fe5b049150506105d1565b611b5c81600081518110611b4557fe5b6020026020010151611b576001611d09565b611ac0565b81600081518110611b6957fe5b60200260200101818152505061191081600181518110611b8557fe5b6020026020010151611b576000611d09565b6001600160a01b038216600090815260208190526040902054611bbf828210156101966113cc565b6001600160a01b03831660009081526020819052604090208282039055600254611be990836111f4565b6002556040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112a1908690614993565b60006060806060611c3961206a565b90506000611c47828a6120d8565b90506060611c5a8a84600954858c6129ac565b9050611c698a826111f4612a90565b60006060611c788c868b612bfd565b91509150611c898c826111c6612a90565b611c93858d6120d8565b600955909e909d50909b509950505050505050505050565b611cd281600081518110611cbb57fe5b6020026020010151611ccd6001611d09565b612c57565b81600081518110611cdf57fe5b60200260200101818152505061191081600181518110611cfb57fe5b6020026020010151611ccd60005b600081611d36577f00000000000000000000000000000000000000000000000000000000000000006105d1565b507f0000000000000000000000000000000000000000000000000000000000000000919050565b600081611d8a577f00000000000000000000000000000000000000000000000000000000000000006105d1565b507f0000000000000000000000000000000000000000000000000000000000000000919050565b600061079e8383611ac0565b600854611dc9816117cd565b8015611dd457508343115b15611ebd576000611e277f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000086612c8a565b90506000611e5e7f000000000000000000000000000000000000000000000000000000000000000086611e59866117b3565b612cbf565b90506000611e6b846113bf565b90506000611e78856117c0565b90506000611e9182848787611e8c8b6117a7565b612cdb565b9050808314611a4057611ea48682612d32565b9550611eb08642612d40565b6008819055955050505050505b50505050565b6000828202611edd841580611add575083858381611ada57fe5b80611eec5760009150506105d1565b670de0b6b3a764000060001982015b046001019150506105d1565b6000611f1a858486858a60600151612d4e565b90505b95945050505050565b600061079e8383612b8f565b6000611f1a858486858a60600151612dc9565b600061079e8383612c57565b6000670de0b6b3a76400008210611f695760006105d1565b50670de0b6b3a76400000390565b6000611f8682151560046113cc565b82611f93575060006105d1565b670de0b6b3a764000083810290611fad90858381611b1a57fe5b826001820381611efb57fe5b6000611fc3610bb6565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015611ffb57600080fd5b505afa15801561200f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e89190614605565b60008061203f83611a4b565b9050612058600061204f836123d0565b116101396113cc565b61206281856123dc565b949350505050565b6040805160028082526060808301845292839291906020830190803683370190505090506120986001611d5d565b816000815181106120a557fe5b6020026020010181815250506120bb6000611d5d565b816001815181106120c857fe5b6020908102919091010152905090565b670de0b6b3a764000060005b835181101561213a576121306121298583815181106120ff57fe5b602002602001015185848151811061211357fe5b6020026020010151612e3f90919063ffffffff16565b8390612e8e565b91506001016120e4565b506105d1600082116101376113cc565b60006121546116a1565b82604051602001610b509291906148c5565b60006060600061217584612eba565b9050612190600082600281111561218857fe5b1460ce6113cc565b606061219b85612ed0565b90506121a9815160026117e7565b6121b281611b35565b60606121bc61206a565b905060006121ca82846120d8565b905060006121d9826002611ac0565b6009929092555099919850909650505050505050565b6001600160a01b03821660009081526020819052604090205461221290826111c6565b6001600160a01b03831660009081526020819052604090205560025461223890826111c6565b6002556040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612279908590614993565b60405180910390a35050565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b6122a4610b92565b6001600160a01b0316141580156122bf57506122bf83612ee6565b156122e7576122cc610b92565b6001600160a01b0316336001600160a01b03161490506105d1565b6122ef611fb9565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b815260040161231e9392919061499c565b60206040518083038186803b15801561233657600080fd5b505afa15801561234a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236e91906144c5565b90506105d1565b1c6103ff1690565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b60006105d1828261298b565b6000808260028111156123eb57fe5b14156123fa5761236e83612baf565b600182600281111561240857fe5b14156124175761236e83612bc9565b61236e83612be3565b60008082600281111561242f57fe5b141561243e5761236e83612bbc565b600182600281111561244c57fe5b141561245b5761236e83612bd6565b61236e83612bf0565b60006105d1826001612f00565b600080806103ff8180805b8385116124e857600285850104612493818a612f00565b935061249e84611a4b565b92506124a9836123d0565b9150898210156124be578060010195506124e2565b898211156124d1576001810394506124e2565b82839750975050505050505061251d565b5061247c565b888110612506576125006124fb84612f11565b611a4b565b82612513565b816125136124fb85612464565b9650965050505050505b9250929050565b6000612553680238fd42c5cf03ffff19831215801561254c575068070c1cc73b00c800008313155b60096113cc565b60008212156125865761256882600003612524565b6a0c097ce7bc90715b34b9f160241b8161257e57fe5b059050610a56565b60006806f05b59d3b200000083126125c657506806f05b59d3b1ffffff1990910190770195e54c5dd42177f53a27172fa9ec6302628270000000006125fc565b6803782dace9d900000083126125f857506803782dace9d8ffffff19909101906b1425982cf597cd205cef73806125fc565b5060015b6064929092029168056bc75e2d6310000068ad78ebc5ac62000000841261264c5768ad78ebc5ac61ffffff199093019268056bc75e2d631000006e01855144814a7ff805980ff008400082020590505b6856bc75e2d6310000008412612688576856bc75e2d630ffffff199093019268056bc75e2d631000006b02df0ab5a80a22c61ab5a70082020590505b682b5e3af16b1880000084126126c257682b5e3af16b187fffff199093019268056bc75e2d63100000693f1fce3da636ea5cf85082020590505b6815af1d78b58c40000084126126fc576815af1d78b58c3fffff199093019268056bc75e2d63100000690127fa27722cc06cc5e282020590505b680ad78ebc5ac6200000841261273557680ad78ebc5ac61fffff199093019268056bc75e2d6310000068280e60114edb805d0382020590505b68056bc75e2d63100000841261276e5768056bc75e2d630fffff199093019268056bc75e2d63100000680ebc5fb4174612111082020590505b6802b5e3af16b188000084126127a7576802b5e3af16b187ffff199093019268056bc75e2d631000006808f00f760a4b2db55d82020590505b68015af1d78b58c4000084126127e05768015af1d78b58c3ffff199093019268056bc75e2d631000006806f5f177578893793782020590505b68056bc75e2d631000008481019085906002908280020505918201919050600368056bc75e2d631000008783020505918201919050600468056bc75e2d631000008783020505918201919050600568056bc75e2d631000008783020505918201919050600668056bc75e2d631000008783020505918201919050600768056bc75e2d631000008783020505918201919050600868056bc75e2d631000008783020505918201919050600968056bc75e2d631000008783020505918201919050600a68056bc75e2d631000008783020505918201919050600b68056bc75e2d631000008783020505918201919050600c68056bc75e2d631000008783020505918201919050606468056bc75e2d63100000848402058502059695505050505050565b60008061290d83612f1e565b9050655af3107a40006000821361292c57652d79883d20008203612936565b652d79883d200082015b8161293d57fe5b059392505050565b600061079e838383612f7a565b600061079e83836016612f7a565b4690565b600082821c623fffff16621fffff811361297e5780612062565b623fffff19179392505050565b1c637fffffff1690565b1c60019081161490565b1c6001600160401b031690565b604080516002808252606080830184529283929190602083019080368337019050509050826129dc579050611f1d565b612a4f877f000000000000000000000000000000000000000000000000000000000000000081518110612a0b57fe5b6020026020010151877f000000000000000000000000000000000000000000000000000000000000000081518110612a3f57fe5b6020026020010151878787612f91565b817f000000000000000000000000000000000000000000000000000000000000000081518110612a7b57fe5b60209081029190910101529695505050505050565b612ac683600081518110612aa057fe5b602002602001015183600081518110612ab557fe5b60200260200101518363ffffffff16565b83600081518110612ad357fe5b602002602001018181525050612b0483600181518110612aef57fe5b602002602001015183600181518110612ab557fe5b83600181518110612b1157fe5b602002602001018181525050505050565b600060606000612b3184612eba565b90506000816002811115612b4157fe5b1415612b5c57612b52868686613009565b9250925050612b87565b6001816002811115612b6a57fe5b1415612b7a57612b5286856130b9565b612b528686866130eb565b505b935093915050565b6000612b9e82151560046113cc565b818381612ba757fe5b049392505050565b60006105d18260ea612964565b60006105d18260b5613157565b60006105d182609f612964565b60006105d182606a613157565b60006105d1826054612964565b60006105d182601f613157565b600060606000612c0c84612eba565b90506001816002811115612c1c57fe5b1415612c2d57612b5286868661318a565b6002816002811115612c3b57fe5b1415612c4c57612b528686866131e0565b612b8561013661237d565b6000612c6682151560046113cc565b82612c73575060006105d1565b816001840381612c7f57fe5b0460010190506105d1565b600080612caa612c9a8486611f77565b612ca48789611f77565b90611f77565b9050612cb581612901565b9695505050505050565b600080612ccf61168f8587611f77565b92909203949350505050565b600080612cf785858542612cee8b611a4b565b93929190613263565b9050607842889003101580612d0c5786612d15565b612d1587612464565b600081815260076020526040902092909255509695505050505050565b600061079e8383604b6132b5565b600061079e8383602c6132c5565b6000612d70612d6587670429d069189e0000612e8e565b8311156101306113cc565b6000612d7c87846111c6565b90506000612d8a8883611f77565b90506000612d988887611ae4565b90506000612da683836132d7565b9050612dbb612db482611f51565b8990612e8e565b9a9950505050505050505050565b6000612deb612de085670429d069189e0000612e8e565b8311156101316113cc565b6000612e01612dfa86856111f4565b8690611f77565b90506000612e0f8588611f77565b90506000612e1d83836132d7565b90506000612e3382670de0b6b3a76400006111f4565b9050612dbb8a82611ec3565b600080612e4c8484613303565b90506000612e66612e5f83612710611ec3565b60016111c6565b905080821015612e7b576000925050506105d1565b612e8582826111f4565b925050506105d1565b6000828202612ea8841580611add575083858381611ada57fe5b670de0b6b3a764000090049392505050565b6000818060200190518101906105d19190614621565b60608180602001905181019061079e91906146e6565b6000612ef8631c74c91760e11b610b1b565b909114919050565b60006104008383015b069392505050565b60006105d1826001613404565b6000612f2e6000831360646113cc565b670c7d713b49da000082138015612f4c5750670f43fc2c04ee000082125b15612f6a57670de0b6b3a7640000612f6383613413565b8161257e57fe5b612f7382613531565b9050610a56565b623fffff828116821b90821b198416179392505050565b6000838311612fa257506000611f1d565b6000612fae8585611f77565b90506000612fc4670de0b6b3a764000088611ae4565b9050612fd8826709b6e64a8ec600006138d0565b91506000612fe683836132d7565b90506000612ffd612ff683611f51565b8b90612e8e565b9050612dbb8187612e8e565b60006060613015611606565b600080613021856138e7565b915091506130336002821060646113cc565b604080516002808252606080830184529260208301908036833701905050905061309488838151811061306257fe5b602002602001015188848151811061307657fe5b6020026020010151856130876105eb565b61308f610885565b613909565b8183815181106130a057fe5b6020908102919091010152919791965090945050505050565b6000606060006130c8846139c0565b905060606130de86836130d96105eb565b6139d6565b9196919550909350505050565b600060606130f7611606565b6060600061310485613a87565b91509150613114825160026117e7565b61311d82611b35565b600061313a88888561312d6105eb565b613135610885565b613a9f565b905061314a8282111560cf6113cc565b9791965090945050505050565b600082821c661fffffffffffff16660fffffffffffff81136131795780612062565b661fffffffffffff19179392505050565b6000606080600061319a85613a87565b915091506131aa825160026117e7565b6131b382611b35565b60006131d08888856131c36105eb565b6131cb610885565b613cca565b905061314a8282101560d06113cc565b600060606000806131f0856138e7565b915091506132026002821060646113cc565b604080516002808252606080830184529260208301908036833701905050905061309488838151811061323157fe5b602002602001015188848151811061324557fe5b6020026020010151856132566105eb565b61325e610885565b613eda565b60008061326f876123d0565b83039050600081870261328189612bbc565b01905060008287026132928a612bd6565b01905060008387026132a38b612bf0565b019050612dbb89848a858b868c613f7c565b6103ff811b1992909216911b1790565b637fffffff811b1992909216911b1790565b6000806132e48484613303565b905060006132f7612e5f83612710611ec3565b9050611f1d82826111c6565b6000816133195750670de0b6b3a76400006105d1565b82613326575060006105d1565b613337600160ff1b841060066113cc565b8261335d770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532841060076113cc565b826000670c7d713b49da00008313801561337e5750670f43fc2c04ee000083125b156133b557600061338e84613413565b9050670de0b6b3a764000080820784020583670de0b6b3a7640000830502019150506133c3565b816133bf84613531565b0290505b670de0b6b3a764000090056133fb680238fd42c5cf03ffff1982128015906133f4575068070c1cc73b00c800008213155b60086113cc565b612cb581612524565b60006104008284038101612f09565b670de0b6b3a7640000026000806a0c097ce7bc90715b34b9f160241b808401906ec097ce7bc90715b34b9f0fffffffff198501028161344e57fe5b05905060006a0c097ce7bc90715b34b9f160241b82800205905081806a0c097ce7bc90715b34b9f160241b81840205915060038205016a0c097ce7bc90715b34b9f160241b82840205915060058205016a0c097ce7bc90715b34b9f160241b82840205915060078205016a0c097ce7bc90715b34b9f160241b82840205915060098205016a0c097ce7bc90715b34b9f160241b828402059150600b8205016a0c097ce7bc90715b34b9f160241b828402059150600d8205016a0c097ce7bc90715b34b9f160241b828402059150600f826002919005919091010295945050505050565b6000670de0b6b3a764000082121561356d57613563826a0c097ce7bc90715b34b9f160241b8161355d57fe5b05613531565b6000039050610a56565b60007e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c000000000000083126135be57770195e54c5dd42177f53a27172fa9ec630262827000000000830592506806f05b59d3b2000000015b73011798004d755d3c8bc8e03204cf44619e00000083126135f6576b1425982cf597cd205cef7380830592506803782dace9d9000000015b606492830292026e01855144814a7ff805980ff0084000831261363e576e01855144814a7ff805980ff008400068056bc75e2d63100000840205925068ad78ebc5ac62000000015b6b02df0ab5a80a22c61ab5a7008312613679576b02df0ab5a80a22c61ab5a70068056bc75e2d6310000084020592506856bc75e2d631000000015b693f1fce3da636ea5cf85083126136b057693f1fce3da636ea5cf85068056bc75e2d631000008402059250682b5e3af16b18800000015b690127fa27722cc06cc5e283126136e757690127fa27722cc06cc5e268056bc75e2d6310000084020592506815af1d78b58c400000015b68280e60114edb805d03831261371c5768280e60114edb805d0368056bc75e2d631000008402059250680ad78ebc5ac6200000015b680ebc5fb41746121110831261374757680ebc5fb4174612111068056bc75e2d631000009384020592015b6808f00f760a4b2db55d831261377c576808f00f760a4b2db55d68056bc75e2d6310000084020592506802b5e3af16b1880000015b6806f5f177578893793783126137b1576806f5f177578893793768056bc75e2d63100000840205925068015af1d78b58c40000015b6806248f33704b28660383126137e5576806248f33704b28660368056bc75e2d63100000840205925067ad78ebc5ac620000015b6805c548670b9510e7ac8312613819576805c548670b9510e7ac68056bc75e2d6310000084020592506756bc75e2d6310000015b600068056bc75e2d63100000840168056bc75e2d63100000808603028161383c57fe5b059050600068056bc75e2d63100000828002059050818068056bc75e2d63100000818402059150600382050168056bc75e2d63100000828402059150600582050168056bc75e2d63100000828402059150600782050168056bc75e2d63100000828402059150600982050168056bc75e2d63100000828402059150600b820501600202606485820105979650505050505050565b6000818310156138e0578161079e565b5090919050565b600080828060200190518101906138fe91906146b0565b909590945092505050565b60008061391a84612ca481886111f4565b90506139336709b6e64a8ec600008210156101326113cc565b600061395161394a670de0b6b3a764000089611ae4565b83906132d7565b9050600061396861396183611f51565b8a90612e8e565b9050600061397589611f51565b905060006139838383611ec3565b9050600061399184836111f4565b90506139b06139a96139a28a611f51565b8490612e8e565b82906111c6565b9c9b505050505050505050505050565b60008180602001905181019061079e9190614683565b606060006139e48484611ae4565b9050606085516001600160401b03811180156139ff57600080fd5b50604051908082528060200260200182016040528015613a29578160200160208202803683370190505b50905060005b8651811015613a7d57613a5e83888381518110613a4857fe5b6020026020010151612e8e90919063ffffffff16565b828281518110613a6a57fe5b6020908102919091010152600101613a2f565b5095945050505050565b60606000828060200190518101906138fe919061463d565b6000606084516001600160401b0381118015613aba57600080fd5b50604051908082528060200260200182016040528015613ae4578160200160208202803683370190505b5090506000805b8851811015613ba957613b44898281518110613b0357fe5b6020026020010151612ca4898481518110613b1a57fe5b60200260200101518c8581518110613b2e57fe5b60200260200101516111f490919063ffffffff16565b838281518110613b5057fe5b602002602001018181525050613b9f613b98898381518110613b6e57fe5b6020026020010151858481518110613b8257fe5b6020026020010151611ec390919063ffffffff16565b83906111c6565b9150600101613aeb565b50670de0b6b3a764000060005b8951811015613ca9576000848281518110613bcd57fe5b6020026020010151841115613c2b576000613bf6613bea86611f51565b8d8581518110613a4857fe5b90506000613c0a828c8681518110613b2e57fe5b9050613c22613b98613c1b8b611f51565b8390611f77565b92505050613c42565b888281518110613c3757fe5b602002602001015190505b6000613c6b8c8481518110613c5357fe5b6020026020010151610985848f8781518110613b2e57fe5b9050613c9d613c968c8581518110613c7f57fe5b602002602001015183612e3f90919063ffffffff16565b8590612e8e565b93505050600101613bb6565b50613cbd613cb682611f51565b8790611ec3565b9998505050505050505050565b6000606084516001600160401b0381118015613ce557600080fd5b50604051908082528060200260200182016040528015613d0f578160200160208202803683370190505b5090506000805b8851811015613db757613d6f898281518110613d2e57fe5b6020026020010151610985898481518110613d4557fe5b60200260200101518c8581518110613d5957fe5b60200260200101516111c690919063ffffffff16565b838281518110613d7b57fe5b602002602001018181525050613dad613b98898381518110613d9957fe5b6020026020010151858481518110613a4857fe5b9150600101613d16565b50670de0b6b3a764000060005b8951811015613e9857600083858381518110613ddc57fe5b60200260200101511115613e38576000613e01613bea86670de0b6b3a76400006111f4565b90506000613e15828c8681518110613b2e57fe5b9050613e2f613b98612129670de0b6b3a76400008c6111f4565b92505050613e4f565b888281518110613e4457fe5b602002602001015190505b6000613e788c8481518110613e6057fe5b6020026020010151610985848f8781518110613d5957fe5b9050613e8c613c968c8581518110613c7f57fe5b93505050600101613dc4565b50670de0b6b3a76400008110613ece57613ec4613ebd82670de0b6b3a76400006111f4565b8790612e8e565b9350505050611f1d565b60009350505050611f1d565b600080613eeb84612ca481886111c6565b9050613f046729a2241af62c00008211156101336113cc565b6000613f1b61394a670de0b6b3a764000089611f77565b90506000613f3b613f3483670de0b6b3a76400006111f4565b8a90611ec3565b90506000613f4889611f51565b90506000613f568383611ec3565b90506000613f6484836111f4565b90506139b06139a9613f758a611f51565b8490611f77565b6000613f888282613fdc565b613f9384601f613fe0565b613f9e866054613ff1565b613fa988606a613fe0565b613fb48a609f613ff1565b613fbf8c60b5613fe0565b613fca8e60ea613ff1565b17171717171798975050505050505050565b1b90565b661fffffffffffff91909116901b90565b623fffff91909116901b90565b6040805160608101909152806000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b80356105d181614b52565b600082601f830112614052578081fd5b815161406561406082614b33565b614b0d565b81815291506020808301908481018184028601820187101561408657600080fd5b60005b848110156140a557815184529282019290820190600101614089565b505050505092915050565b600082601f8301126140c0578081fd5b81356001600160401b038111156140d5578182fd5b6140e8601f8201601f1916602001614b0d565b91508082528360208285010111156140ff57600080fd5b8060208401602084013760009082016020015292915050565b8035600281106105d157600080fd5b80356105d181614b75565b600060208284031215614143578081fd5b813561079e81614b52565b60008060408385031215614160578081fd5b823561416b81614b52565b9150602083013561417b81614b52565b809150509250929050565b60008060006060848603121561419a578081fd5b83356141a581614b52565b925060208401356141b581614b52565b929592945050506040919091013590565b600080600080600080600060e0888a0312156141e0578485fd5b87356141eb81614b52565b965060208801356141fb81614b52565b95506040880135945060608801359350608088013560ff8116811461421e578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561424d578182fd5b823561425881614b52565b946020939093013593505050565b60008060006060848603121561427a578081fd5b83516001600160401b0380821115614290578283fd5b818601915086601f8301126142a3578283fd5b81516142b161406082614b33565b80828252602080830192508086018b8283870289010111156142d1578788fd5b8796505b848710156142fc5780516142e881614b52565b8452600196909601959281019281016142d5565b508901519097509350505080821115614313578283fd5b5061432086828701614042565b925050604084015190509250925092565b60006020808385031215614343578182fd5b82356001600160401b03811115614358578283fd5b8301601f81018513614368578283fd5b803561437661406082614b33565b818152838101908385016040808502860187018a1015614394578788fd5b8795505b848610156143e15780828b0312156143ae578788fd5b6143b781614b0d565b6143c18b84614127565b815282880135888201528452600195909501949286019290810190614398565b509098975050505050505050565b60006020808385031215614401578182fd5b82356001600160401b03811115614416578283fd5b8301601f81018513614426578283fd5b803561443461406082614b33565b818152838101908385016060808502860187018a1015614452578788fd5b8795505b848610156143e15780828b03121561446c578788fd5b61447581614b0d565b61447f8b84614127565b81528288013588820152604080840135908201528452600195909501949286019290810190614456565b6000602082840312156144ba578081fd5b813561079e81614b67565b6000602082840312156144d6578081fd5b815161079e81614b67565b600080600080600080600060e0888a0312156144fb578081fd5b8735965060208089013561450e81614b52565b9650604089013561451e81614b52565b955060608901356001600160401b0380821115614539578384fd5b818b0191508b601f83011261454c578384fd5b813561455a61406082614b33565b8082825285820191508585018f878886028801011115614578578788fd5b8795505b8386101561459a57803583526001959095019491860191860161457c565b509850505060808b0135955060a08b0135945060c08b01359250808311156145c0578384fd5b50506145ce8a828b016140b0565b91505092959891949750929550565b6000602082840312156145ee578081fd5b81356001600160e01b03198116811461079e578182fd5b600060208284031215614616578081fd5b815161079e81614b52565b600060208284031215614632578081fd5b815161079e81614b75565b600080600060608486031215614651578081fd5b835161465c81614b75565b60208501519093506001600160401b03811115614677578182fd5b61432086828701614042565b60008060408385031215614695578182fd5b82516146a081614b75565b6020939093015192949293505050565b6000806000606084860312156146c4578081fd5b83516146cf81614b75565b602085015160409095015190969495509392505050565b600080604083850312156146f8578182fd5b825161470381614b75565b60208401519092506001600160401b0381111561471e578182fd5b61472a85828601614042565b9150509250929050565b600060208284031215614745578081fd5b813561079e81614b75565b600080600060608486031215614764578081fd5b83356001600160401b038082111561477a578283fd5b8186019150610120808389031215614790578384fd5b61479981614b0d565b90506147a58884614118565b81526147b48860208501614037565b60208201526147c68860408501614037565b6040820152606083013560608201526080830135608082015260a083013560a08201526147f68860c08501614037565b60c08201526148088860e08501614037565b60e08201526101008084013583811115614820578586fd5b61482c8a8287016140b0565b9183019190915250976020870135975060409096013595945050505050565b60006020828403121561485c578081fd5b5035919050565b6000815180845260208085019450808401835b8381101561489257815187529582019590820190600101614876565b509495945050505050565b9182526001600160e01b031916602082015260240190565b6000828483379101908152919050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b8181101561492c57835183529284019291840191600101614910565b50909695505050505050565b60006020825261079e6020830184614863565b60006040825261495e6040830185614863565b8281036020840152611f1d8185614863565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b9586526020860194909452604085019290925260608401521515608083015260a082015260c00190565b6000602080835283518082850152825b81811015614abf57858101830151858201604001528201614aa3565b81811115614ad05783604083870101525b50601f01601f1916929092016040019392505050565b6000838252604060208301526120626040830184614863565b60ff91909116815260200190565b6040518181016001600160401b0381118282101715614b2b57600080fd5b604052919050565b60006001600160401b03821115614b48578081fd5b5060209081020190565b6001600160a01b03811681146105e857600080fd5b80151581146105e857600080fd5b600381106105e857600080fdfea26469706673582212201dbf8d364d926088a19c5f3f5d0ca0ab72cf3eda8f3f78dda45ab2619de4b6d664736f6c63430007010033a264697066735822122062c63a2c3089490a939fe9f20e0e99ef310f04a393c33a92c66f45a3b2cea18064736f6c63430007010033"
-}
\ No newline at end of file
+ ]
+}
diff --git a/crates/contracts/artifacts/BalancerV2WeightedPoolFactory.json b/contracts/artifacts/BalancerV2WeightedPoolFactory.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV2WeightedPoolFactory.json
rename to contracts/artifacts/BalancerV2WeightedPoolFactory.json
index ebd97e1e2f..18feaf9fa5 100644
--- a/crates/contracts/artifacts/BalancerV2WeightedPoolFactory.json
+++ b/contracts/artifacts/BalancerV2WeightedPoolFactory.json
@@ -67,7 +67,10 @@
],
"stateMutability": "nonpayable",
"type": "function"
- },
+ }
+ ],
+ "bytecode": "0x60c060405234801561001057600080fd5b5060405161604138038061604183398101604081905261002f9161004d565b60601b6001600160601b0319166080526276a700420160a05261007b565b60006020828403121561005e578081fd5b81516001600160a01b0381168114610074578182fd5b9392505050565b60805160601c60a051615f9c6100a56000398060d6528061010052508061015c5250615f9c6000f3fe60806040523480156200001157600080fd5b5060043610620000525760003560e01c80632da47c4014620000575780636634b753146200007a5780638d928af814620000a0578063fbce039314620000b9575b600080fd5b62000061620000d0565b6040516200007192919062000634565b60405180910390f35b620000916200008b366004620003c0565b6200013c565b60405162000071919062000562565b620000aa6200015a565b6040516200007191906200054e565b620000aa620000ca366004620003e6565b6200017e565b600080427f00000000000000000000000000000000000000000000000000000000000000008110156200012e57807f000000000000000000000000000000000000000000000000000000000000000003925062278d00915062000137565b60009250600091505b509091565b6001600160a01b031660009081526020819052604090205460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000090565b60008060006200018d620000d0565b9150915060006200019d6200015a565b8a8a8a8a8a88888c604051620001b3906200024b565b620001c7999897969594939291906200056d565b604051809103906000f080158015620001e4573d6000803e3d6000fd5b509050620001f281620001ff565b9998505050505050505050565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc9190a250565b6158b680620006b183390190565b8035620002668162000697565b92915050565b600082601f8301126200027d578081fd5b8135620002946200028e826200066a565b62000642565b818152915060208083019084810181840286018201871015620002b657600080fd5b60005b84811015620002e2578135620002cf8162000697565b84529282019290820190600101620002b9565b505050505092915050565b600082601f830112620002fe578081fd5b81356200030f6200028e826200066a565b8181529150602080830190848101818402860182018710156200033157600080fd5b60005b84811015620002e25781358452928201929082019060010162000334565b600082601f83011262000363578081fd5b813567ffffffffffffffff8111156200037a578182fd5b6200038f601f8201601f191660200162000642565b9150808252836020828501011115620003a757600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215620003d2578081fd5b8135620003df8162000697565b9392505050565b60008060008060008060c08789031215620003ff578182fd5b863567ffffffffffffffff8082111562000417578384fd5b620004258a838b0162000352565b975060208901359150808211156200043b578384fd5b620004498a838b0162000352565b965060408901359150808211156200045f578384fd5b6200046d8a838b016200026c565b9550606089013591508082111562000483578384fd5b506200049289828a01620002ed565b93505060808701359150620004ab8860a0890162000259565b90509295509295509295565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015620004f557815187529582019590820190600101620004d7565b509495945050505050565b60008151808452815b81811015620005275760208185018101518683018201520162000509565b81811115620005395782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b60006101206001600160a01b038c16835260208181850152620005938285018d62000500565b91508382036040850152620005a9828c62000500565b84810360608601528a51808252828c01935090820190845b81811015620005e957620005d685516200068b565b83529383019391830191600101620005c1565b50508481036080860152620005ff818b620004c4565b93505050508560a08301528460c08301528360e083015262000626610100830184620004b7565b9a9950505050505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156200066257600080fd5b604052919050565b600067ffffffffffffffff82111562000681578081fd5b5060209081020190565b6001600160a01b031690565b6001600160a01b0381168114620006ad57600080fd5b5056fe6105006040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120523480156200003757600080fd5b50604051620058b6380380620058b68339810160408190526200005a9162000cf2565b88888888878787878785516002146200007557600162000078565b60025b6040805180820190915260018152603160f81b6020808301918252336080526001600160601b0319606087901b1660a0528b51908c0190812060c0529151902060e0527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6101005289518a918a918a918a918a918a918a91849184918a918a9162000107916003919062000abb565b5080516200011d90600490602084019062000abb565b50620001359150506276a70083111561019462000865565b6200014962278d0082111561019562000865565b42909101610140819052016101605284516200016b906002111560c862000865565b6200018360088651111560c96200086560201b60201c565b62000199856200087a60201b62000d571760201c565b620001a48462000886565b6040516309b2760f60e01b81526000906001600160a01b038b16906309b2760f90620001d5908c9060040162000eab565b602060405180830381600087803b158015620001f057600080fd5b505af115801562000205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022b919062000cd9565b9050896001600160a01b03166366a9c7d2828889516001600160401b03811180156200025657600080fd5b5060405190808252806020026020018201604052801562000281578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401620002a29392919062000e0f565b600060405180830381600087803b158015620002bd57600080fd5b505af1158015620002d2573d6000803e3d6000fd5b5050506001600160601b031960608c901b1661018052506101a081905285516101c0528551620003045760006200031b565b856000815181106200031257fe5b60200260200101515b60601b6001600160601b0319166101e05285516001106200033e57600062000355565b856001815181106200034c57fe5b60200260200101515b60601b6001600160601b031916610200528551600210620003785760006200038f565b856002815181106200038657fe5b60200260200101515b60601b6001600160601b031916610220528551600310620003b2576000620003c9565b85600381518110620003c057fe5b60200260200101515b60601b6001600160601b031916610240528551600410620003ec57600062000403565b85600481518110620003fa57fe5b60200260200101515b60601b6001600160601b031916610260528551600510620004265760006200043d565b856005815181106200043457fe5b60200260200101515b60601b6001600160601b0319166102805285516006106200046057600062000477565b856006815181106200046e57fe5b60200260200101515b60601b6001600160601b0319166102a05285516007106200049a576000620004b1565b85600781518110620004a857fe5b60200260200101515b60601b6001600160601b0319166102c0528551620004d1576000620004f7565b620004f786600081518110620004e357fe5b6020026020010151620008f560201b60201c565b6102e05285516001106200050d5760006200051f565b6200051f86600181518110620004e357fe5b6103005285516002106200053557600062000547565b6200054786600281518110620004e357fe5b6103205285516003106200055d5760006200056f565b6200056f86600381518110620004e357fe5b6103405285516004106200058557600062000597565b6200059786600481518110620004e357fe5b610360528551600510620005ad576000620005bf565b620005bf86600581518110620004e357fe5b610380528551600610620005d5576000620005e7565b620005e786600681518110620004e357fe5b6103a0528551600710620005fd5760006200060f565b6200060f86600781518110620004e357fe5b6103c08181525050505050505050505050505050505050505050600086519050620006478187516200099760201b62000d651760201c565b6000806000805b848160ff161015620006cd5760008a8260ff16815181106200066c57fe5b6020026020010151905062000694662386f26fc1000082101561012e6200086560201b60201c565b620006ae8186620009a660201b62000d721790919060201c565b945082811115620006c3578160ff1693508092505b506001016200064e565b50620006e6670de0b6b3a7640000841461013462000865565b6103e08290528851620006fb57600062000712565b886000815181106200070957fe5b60200260200101515b610400528851600110620007285760006200073f565b886001815181106200073657fe5b60200260200101515b610420528851600210620007555760006200076c565b886002815181106200076357fe5b60200260200101515b6104405288516003106200078257600062000799565b886003815181106200079057fe5b60200260200101515b610460528851600410620007af576000620007c6565b88600481518110620007bd57fe5b60200260200101515b610480528851600510620007dc576000620007f3565b88600581518110620007ea57fe5b60200260200101515b6104a05288516006106200080957600062000820565b886006815181106200081757fe5b60200260200101515b6104c0528851600710620008365760006200084d565b886007815181106200084457fe5b60200260200101515b6104e0525062000f329b505050505050505050505050565b8162000876576200087681620009c3565b5050565b80620008768162000a16565b6200089b64e8d4a5100082101560cb62000865565b620008b367016345785d8a000082111560ca62000865565b60078190556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc90620008ea90839062000ec0565b60405180910390a150565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200093257600080fd5b505afa15801562000947573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096d919062000dec565b60ff16905060006200098c60128362000aa360201b62000d841760201c565b600a0a949350505050565b62000876828214606762000865565b6000828201620009ba848210158362000865565b90505b92915050565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b60028151101562000a275762000aa0565b60008160008151811062000a3757fe5b602002602001015190506000600190505b825181101562000a9d57600083828151811062000a6157fe5b6020026020010151905062000a92816001600160a01b0316846001600160a01b03161060656200086560201b60201c565b915060010162000a48565b50505b50565b600062000ab583831115600162000865565b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000afe57805160ff191683800117855562000b2e565b8280016001018555821562000b2e579182015b8281111562000b2e57825182559160200191906001019062000b11565b5062000b3c92915062000b40565b5090565b5b8082111562000b3c576000815560010162000b41565b8051620009bd8162000f1c565b600082601f83011262000b75578081fd5b815162000b8c62000b868262000ef0565b62000ec9565b81815291506020808301908481018184028601820187101562000bae57600080fd5b60005b8481101562000bda57815162000bc78162000f1c565b8452928201929082019060010162000bb1565b505050505092915050565b600082601f83011262000bf6578081fd5b815162000c0762000b868262000ef0565b81815291506020808301908481018184028601820187101562000c2957600080fd5b60005b8481101562000bda5781518452928201929082019060010162000c2c565b600082601f83011262000c5b578081fd5b81516001600160401b0381111562000c71578182fd5b602062000c87601f8301601f1916820162000ec9565b9250818352848183860101111562000c9e57600080fd5b60005b8281101562000cbe57848101820151848201830152810162000ca1565b8281111562000cd05760008284860101525b50505092915050565b60006020828403121562000ceb578081fd5b5051919050565b60008060008060008060008060006101208a8c03121562000d11578485fd5b62000d1d8b8b62000b57565b60208b01519099506001600160401b038082111562000d3a578687fd5b62000d488d838e0162000c4a565b995060408c015191508082111562000d5e578687fd5b62000d6c8d838e0162000c4a565b985060608c015191508082111562000d82578687fd5b62000d908d838e0162000b64565b975060808c015191508082111562000da6578687fd5b5062000db58c828d0162000be5565b95505060a08a0151935060c08a0151925060e08a0151915062000ddd8b6101008c0162000b57565b90509295985092959850929598565b60006020828403121562000dfe578081fd5b815160ff81168114620009ba578182fd5b60006060820185835260206060818501528186518084526080860191508288019350845b8181101562000e5b5762000e48855162000f10565b8352938301939183019160010162000e33565b505084810360408601528551808252908201925081860190845b8181101562000e9d5762000e8a835162000f10565b8552938301939183019160010162000e75565b509298975050505050505050565b602081016003831062000eba57fe5b91905290565b90815260200190565b6040518181016001600160401b038111828210171562000ee857600080fd5b604052919050565b60006001600160401b0382111562000f06578081fd5b5060209081020190565b6001600160a01b031690565b6001600160a01b038116811462000aa057600080fd5b60805160a05160601c60c05160e051610100516101205161014051610160516101805160601c6101a0516101c0516101e05160601c6102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c05160601c6102e05161030051610320516103405161036051610380516103a0516103c0516103e05161040051610420516104405161046051610480516104a0516104c0516104e05161476e6200114860003980611ec55280612857525080611e8252806127f6525080611e3f5280612795525080611dfc5280612734525080611db952806126d3525080611d765280612672525080611d335280612611525080611cf052806125b05250806122d0528061230452806123405250806116285280611b1e5250806115e55280611abd5250806115a25280611a5c52508061155f52806119fb52508061151c528061199a5250806114d9528061193952508061149652806118d85250806114455280611877525080611ae3528061281c525080611a8252806127bb525080611a21528061275a5250806119c052806126f952508061195f52806126985250806118fe528061263752508061189d52806125d652508061183c52806125755250806111025250806105d7525080610835525080610ef1525080610ecd525080610ab5525080610ff452508061103652508061101552508061081152508061079b525061476e6000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637ecebe001161010f578063a9059cbb116100a2578063d5c096c411610071578063d5c096c4146103e6578063d73dd623146103f9578063dd62ed3e1461040c578063f89f27ed1461041f576101f0565b8063a9059cbb146103b0578063aaabadc5146103c3578063c0ff1a15146103cb578063d505accf146103d3576101f0565b80638d928af8116100de5780638d928af81461038557806395d89b411461038d5780639b02cdde146103955780639d2c110c1461039d576101f0565b80637ecebe0014610337578063851c1bb31461034a57806387ec68171461035d578063893d20e814610370576101f0565b806338e9922e11610187578063661884631161015657806366188463146102e8578063679aefce146102fb57806370a082311461030357806374f3b00914610316576101f0565b806338e9922e146102a457806338fff2d0146102b757806355c67628146102bf5780636028bfd4146102c7576101f0565b80631c0de051116101c35780631c0de0511461025d57806323b872dd14610274578063313ce567146102875780633644e5151461029c576101f0565b806306fdde03146101f5578063095ea7b31461021357806316c38b3c1461023357806318160ddd14610248575b600080fd5b6101fd610434565b60405161020a9190614647565b60405180910390f35b61022661022136600461401c565b6104cb565b60405161020a919061457e565b610246610241366004614113565b6104e2565b005b6102506104f6565b60405161020a91906145a1565b6102656104fc565b60405161020a93929190614589565b610226610282366004613f67565b610525565b61028f6105a8565b60405161020a91906146b3565b6102506105ad565b6102466102b236600461449d565b6105bc565b6102506105d5565b6102506105f9565b6102da6102d536600461414b565b6105ff565b60405161020a92919061469a565b6102266102f636600461401c565b610636565b610250610690565b610250610311366004613f13565b6106bb565b61032961032436600461414b565b6106da565b60405161020a929190614559565b610250610345366004613f13565b61077c565b610250610358366004614248565b610797565b6102da61036b36600461414b565b6107e9565b61037861080f565b60405161020a9190614532565b610378610833565b6101fd610857565b6102506108b8565b6102506103ab3660046143a1565b6108be565b6102266103be36600461401c565b6109a5565b6103786109b2565b6102506109bc565b6102466103e1366004613fa7565b610a80565b6103296103f436600461414b565b610bc9565b61022661040736600461401c565b610cec565b61025061041a366004613f2f565b610d22565b610427610d4d565b60405161020a9190614546565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104c05780601f10610495576101008083540402835291602001916104c0565b820191906000526020600020905b8154815290600101906020018083116104a357829003601f168201915b505050505090505b90565b60006104d8338484610d9a565b5060015b92915050565b6104ea610e02565b6104f381610e30565b50565b60025490565b6000806000610509610eae565b159250610514610ecb565b915061051e610eef565b9050909192565b6001600160a01b0383166000818152600160209081526040808320338085529252822054919261056391148061055b5750838210155b610197610f13565b61056e858585610f21565b336001600160a01b0386161480159061058957506000198114155b1561059b5761059b8533858403610d9a565b60019150505b9392505050565b601290565b60006105b7610ff0565b905090565b6105c4610e02565b6105cc61108d565b6104f3816110a2565b7f000000000000000000000000000000000000000000000000000000000000000090565b60075490565b600060606106158651610610611100565b610d65565b61062a898989898989896111246111ec611252565b97509795505050505050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548083106106725761066d33856000610d9a565b610686565b61068633856106818487610d84565b610d9a565b5060019392505050565b60006105b761069d6104f6565b6106b56106a86109bc565b6106b0611100565b611374565b90611398565b6001600160a01b0381166000908152602081905260409020545b919050565b606080886107046106e9610833565b6001600160a01b0316336001600160a01b03161460cd610f13565b61071961070f6105d5565b82146101f4610f13565b60606107236113e9565b905061072f8882611666565b60006060806107438e8e8e8e8e8e8e611124565b9250925092506107538d846116c7565b61075d82856111ec565b61076781856111ec565b909550935050505b5097509795505050505050565b6001600160a01b031660009081526005602052604090205490565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016107cc9291906144ef565b604051602081830303815290604052805190602001209050919050565b600060606107fa8651610610611100565b61062a8989898989898961175a6117d7611252565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104c05780601f10610495576101008083540402835291602001916104c0565b60085490565b6000806108ce8560200151611838565b905060006108df8660400151611838565b90506000865160018111156108f057fe5b1415610956576109038660600151611b4d565b60608701526109128583611b71565b945061091e8482611b71565b935061092e866060015183611b71565b60608701526000610940878787611b7d565b905061094c8183611bb8565b93505050506105a1565b6109608583611b71565b945061096c8482611b71565b935061097c866060015182611b71565b6060870152600061098e878787611bc4565b905061099a8184611bf7565b905061094c81611c03565b60006104d8338484610f21565b60006105b7611c1a565b600060606109c8610833565b6001600160a01b031663f94d46686109de6105d5565b6040518263ffffffff1660e01b81526004016109fa91906145a1565b60006040518083038186803b158015610a1257600080fd5b505afa158015610a26573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a4e9190810190614047565b50915050610a6381610a5e6113e9565b611666565b6060610a6d611c94565b9050610a798183611ef1565b9250505090565b610a8e8442111560d1610f13565b6001600160a01b0387166000908152600560209081526040808320549051909291610ae5917f0000000000000000000000000000000000000000000000000000000000000000918c918c918c9188918d91016145c9565b6040516020818303038152906040528051906020012090506000610b0882611f63565b9050600060018288888860405160008152602001604052604051610b2f9493929190614629565b6020604051602081039080840390855afa158015610b51573d6000803e3d6000fd5b5050604051601f1901519150610b9390506001600160a01b03821615801590610b8b57508b6001600160a01b0316826001600160a01b0316145b6101f8610f13565b6001600160a01b038b166000908152600560205260409020600185019055610bbc8b8b8b610d9a565b5050505050505050505050565b60608088610bd86106e9610833565b610be361070f6105d5565b6060610bed6113e9565b9050610bf76104f6565b610c9d5760006060610c0b8d8d8d8a611f7f565b91509150610c20620f424083101560cc610f13565b610c2e6000620f424061201a565b610c3d8b620f4240840361201a565b610c4781846117d7565b80610c50611100565b67ffffffffffffffff81118015610c6657600080fd5b50604051908082528060200260200182016040528015610c90578160200160208202803683370190505b509550955050505061076f565b610ca78882611666565b6000606080610cbb8e8e8e8e8e8e8e61175a565b925092509250610ccb8c8461201a565b610cd582856117d7565b610cdf81856111ec565b909550935061076f915050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916104d89185906106819086610d72565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606105b7611c94565b80610d61816120b0565b5050565b610d618183146067610f13565b60008282016105a18482101583610f13565b6000610d94838311156001610f13565b50900390565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610df59085906145a1565b60405180910390a3505050565b6000610e196000356001600160e01b031916610797565b90506104f3610e288233612129565b610191610f13565b8015610e5057610e4b610e41610ecb565b4210610193610f13565b610e65565b610e65610e5b610eef565b42106101a9610f13565b6006805460ff19168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be6490610ea390839061457e565b60405180910390a150565b6000610eb8610eef565b4211806105b757505060065460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b81610d6157610d6181612219565b6001600160a01b038316600090815260208190526040902054610f4982821015610196610f13565b610f606001600160a01b0384161515610199610f13565b6001600160a01b03808516600090815260208190526040808220858503905591851681522054610f909083610d72565b6001600160a01b0380851660008181526020819052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610fe29086906145a1565b60405180910390a350505050565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061105d61226c565b306040516020016110729594939291906145fd565b60405160208183030381529060405280519060200120905090565b6110a0611098610eae565b610192610f13565b565b6110b564e8d4a5100082101560cb610f13565b6110cb67016345785d8a000082111560ca610f13565b60078190556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc90610ea39083906145a1565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006060806060611133611c94565b905061113d610eae565b1561117457600061114e828a611ef1565b905061115f8983600854848b612270565b925061116e8984610d84612380565b506111c0565b61117c611100565b67ffffffffffffffff8111801561119257600080fd5b506040519080825280602002602001820160405280156111bc578160200160208202803683370190505b5091505b6111cb8882876123eb565b90945092506111db888483612458565b600855509750975097945050505050565b60005b6111f7611100565b81101561124d5761122e83828151811061120d57fe5b602002602001015183838151811061122157fe5b6020026020010151612471565b83828151811061123a57fe5b60209081029190910101526001016111ef565b505050565b333014611310576000306001600160a01b0316600036604051611276929190614507565b6000604051808303816000865af19150503d80600081146112b3576040519150601f19603f3d011682016040523d82523d6000602084013e6112b8565b606091505b5050905080600081146112c757fe5b60046000803e6000516001600160e01b0319166343adbafb60e01b81146112f2573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b606061131a6113e9565b90506113268782611666565b6000606061133d8c8c8c8c8c8c8c8c63ffffffff16565b509150915061135081848663ffffffff16565b8051601f1982018390526343adbafb603f1983015260200260231982016044820181fd5b60008282026105a184158061139157508385838161138e57fe5b04145b6003610f13565b60006113a78215156004610f13565b826113b4575060006104dc565b670de0b6b3a7640000838102906113d7908583816113ce57fe5b04146005610f13565b8281816113e057fe5b049150506104dc565b606060006113f5611100565b905060608167ffffffffffffffff8111801561141057600080fd5b5060405190808252806020026020018201604052801561143a578160200160208202803683370190505b5090508115611482577f00000000000000000000000000000000000000000000000000000000000000008160008151811061147157fe5b60200260200101818152505061148b565b91506104c89050565b6001821115611482577f0000000000000000000000000000000000000000000000000000000000000000816001815181106114c257fe5b6020026020010181815250506002821115611482577f00000000000000000000000000000000000000000000000000000000000000008160028151811061150557fe5b6020026020010181815250506003821115611482577f00000000000000000000000000000000000000000000000000000000000000008160038151811061154857fe5b6020026020010181815250506004821115611482577f00000000000000000000000000000000000000000000000000000000000000008160048151811061158b57fe5b6020026020010181815250506005821115611482577f0000000000000000000000000000000000000000000000000000000000000000816005815181106115ce57fe5b6020026020010181815250506006821115611482577f00000000000000000000000000000000000000000000000000000000000000008160068151811061161157fe5b6020026020010181815250506007821115611482577f00000000000000000000000000000000000000000000000000000000000000008160078151811061165457fe5b60200260200101818152505091505090565b60005b611671611100565b81101561124d576116a883828151811061168757fe5b602002602001015183838151811061169b57fe5b6020026020010151611374565b8382815181106116b457fe5b6020908102919091010152600101611669565b6001600160a01b0382166000908152602081905260409020546116ef82821015610196610f13565b6001600160a01b038316600090815260208190526040902082820390556002546117199083610d84565b6002556040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610df59086906145a1565b600060608061176761108d565b6060611771611c94565b9050600061177f828a611ef1565b905060606117928a84600854858c612270565b90506117a18a82610d84612380565b600060606117b08c868b612491565b915091506117bf8c82876124eb565b600855909e909d50909b509950505050505050505050565b60005b6117e2611100565b81101561124d576118198382815181106117f857fe5b602002602001015183838151811061180c57fe5b60200260200101516124fa565b83828151811061182557fe5b60209081029190910101526001016117da565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561189b57507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156118fc57507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561195d57507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156119be57507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611a1f57507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611a8057507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611ae157507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611b4257507f00000000000000000000000000000000000000000000000000000000000000006106d5565b6106d5610135612219565b600080611b656007548461252d90919063ffffffff16565b90506105a18382610d84565b60006105a18383611374565b6000611b8761108d565b611bb083611b988660200151612571565b84611ba68860400151612571565b886060015161287b565b949350505050565b60006105a18383612471565b6000611bce61108d565b611bb083611bdf8660200151612571565b84611bed8860400151612571565b88606001516128f6565b60006105a183836124fa565b60006104dc611c1360075461296c565b8390612992565b6000611c24610833565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015611c5c57600080fd5b505afa158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190614270565b60606000611ca0611100565b905060608167ffffffffffffffff81118015611cbb57600080fd5b50604051908082528060200260200182016040528015611ce5578160200160208202803683370190505b5090508115611482577f000000000000000000000000000000000000000000000000000000000000000081600081518110611d1c57fe5b6020026020010181815250506001821115611482577f000000000000000000000000000000000000000000000000000000000000000081600181518110611d5f57fe5b6020026020010181815250506002821115611482577f000000000000000000000000000000000000000000000000000000000000000081600281518110611da257fe5b6020026020010181815250506003821115611482577f000000000000000000000000000000000000000000000000000000000000000081600381518110611de557fe5b6020026020010181815250506004821115611482577f000000000000000000000000000000000000000000000000000000000000000081600481518110611e2857fe5b6020026020010181815250506005821115611482577f000000000000000000000000000000000000000000000000000000000000000081600581518110611e6b57fe5b6020026020010181815250506006821115611482577f000000000000000000000000000000000000000000000000000000000000000081600681518110611eae57fe5b6020026020010181815250506007821115611482577f00000000000000000000000000000000000000000000000000000000000000008160078151811061165457fe5b670de0b6b3a764000060005b8351811015611f5357611f49611f42858381518110611f1857fe5b6020026020010151858481518110611f2c57fe5b60200260200101516129d490919063ffffffff16565b8390612a23565b9150600101611efd565b506104dc60008211610137610f13565b6000611f6d610ff0565b826040516020016107cc929190614517565b60006060611f8b61108d565b6000611f9684612a4f565b9050611fb16000826002811115611fa957fe5b1460ce610f13565b6060611fbc85612a65565b9050611fd0611fc9611100565b8251610d65565b611fdc81610a5e6113e9565b6060611fe6611c94565b90506000611ff48284611ef1565b90506000612004826106b0611100565b6008929092555099919850909650505050505050565b6001600160a01b03821660009081526020819052604090205461203d9082610d72565b6001600160a01b0383166000908152602081905260409020556002546120639082610d72565b6002556040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120a49085906145a1565b60405180910390a35050565b6002815110156120bf576104f3565b6000816000815181106120ce57fe5b602002602001015190506000600190505b825181101561124d5760008382815181106120f657fe5b6020026020010151905061211f816001600160a01b0316846001600160a01b0316106065610f13565b91506001016120df565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b61214861080f565b6001600160a01b031614158015612163575061216383612a7b565b1561218b5761217061080f565b6001600160a01b0316336001600160a01b03161490506104dc565b612193611c1a565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b81526004016121c2939291906145aa565b60206040518083038186803b1580156121da57600080fd5b505afa1580156121ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612212919061412f565b90506104dc565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b4690565b60608061227b611100565b67ffffffffffffffff8111801561229157600080fd5b506040519080825280602002602001820160405280156122bb578160200160208202803683370190505b509050826122ca579050612377565b61233d877f0000000000000000000000000000000000000000000000000000000000000000815181106122f957fe5b6020026020010151877f00000000000000000000000000000000000000000000000000000000000000008151811061232d57fe5b6020026020010151878787612a95565b817f00000000000000000000000000000000000000000000000000000000000000008151811061236957fe5b602090810291909101015290505b95945050505050565b60005b61238b611100565b8110156123e5576123c68482815181106123a157fe5b60200260200101518483815181106123b557fe5b60200260200101518463ffffffff16565b8482815181106123d257fe5b6020908102919091010152600101612383565b50505050565b6000606060006123fa84612a4f565b9050600081600281111561240a57fe5b14156124255761241b868686612b0d565b9250925050612450565b600181600281111561243357fe5b14156124435761241b8685612beb565b61241b868686612c1d565b505b935093915050565b60006124678484610d84612380565b611bb08285611ef1565b60006124808215156004610f13565b81838161248957fe5b049392505050565b6000606060006124a084612a4f565b905060018160028111156124b057fe5b14156124c15761241b868686612c88565b60028160028111156124cf57fe5b14156124e05761241b868686612ce2565b61244e610136612219565b60006124678484610d72612380565b60006125098215156004610f13565b82612516575060006104dc565b81600184038161252257fe5b0460010190506104dc565b600082820261254784158061139157508385838161138e57fe5b806125565760009150506104dc565b670de0b6b3a764000060001982015b046001019150506104dc565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156125d457507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561263557507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561269657507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156126f757507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561275857507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156127b957507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561281a57507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611b4257507f00000000000000000000000000000000000000000000000000000000000000006106d5565b600061289d61289287670429d069189e0000612a23565b831115610130610f13565b60006128a98784610d72565b905060006128b78883612992565b905060006128c58887611398565b905060006128d38383612d8a565b90506128e86128e18261296c565b8990612a23565b9a9950505050505050505050565b600061291861290d85670429d069189e0000612a23565b831115610131610f13565b600061292e6129278685610d84565b8690612992565b9050600061293c8588612992565b9050600061294a8383612d8a565b9050600061296082670de0b6b3a7640000610d84565b90506128e88a8261252d565b6000670de0b6b3a764000082106129845760006104dc565b50670de0b6b3a76400000390565b60006129a18215156004610f13565b826129ae575060006104dc565b670de0b6b3a7640000838102906129c8908583816113ce57fe5b82600182038161256557fe5b6000806129e18484612db6565b905060006129fb6129f48361271061252d565b6001610d72565b905080821015612a10576000925050506104dc565b612a1a8282610d84565b925050506104dc565b6000828202612a3d84158061139157508385838161138e57fe5b670de0b6b3a764000090049392505050565b6000818060200190518101906104dc919061428c565b6060818060200190518101906105a19190614352565b6000612a8d631c74c91760e11b610797565b909114919050565b6000838311612aa657506000612377565b6000612ab28585612992565b90506000612ac8670de0b6b3a764000088611398565b9050612adc826709b6e64a8ec60000612ec1565b91506000612aea8383612d8a565b90506000612b01612afa8361296c565b8b90612a23565b90506128e88187612a23565b60006060612b1961108d565b600080612b2585612ed8565b91509150612b3d612b34611100565b82106064610f13565b6060612b47611100565b67ffffffffffffffff81118015612b5d57600080fd5b50604051908082528060200260200182016040528015612b87578160200160208202803683370190505b509050612bc6888381518110612b9957fe5b6020026020010151888481518110612bad57fe5b602002602001015185612bbe6104f6565b600754612efa565b818381518110612bd257fe5b6020908102919091010152919791965090945050505050565b600060606000612bfa84612fb7565b90506060612c108683612c0b6104f6565b612fcd565b9196919550909350505050565b60006060612c2961108d565b60606000612c368561307f565b91509150612c478251610610611100565b612c5382610a5e6113e9565b6000612c6b888885612c636104f6565b600754613097565b9050612c7b8282111560cf610f13565b9791965090945050505050565b60006060806000612c988561307f565b91509150612cae612ca7611100565b8351610d65565b612cba82610a5e6113e9565b6000612cd2888885612cca6104f6565b6007546132bc565b9050612c7b8282101560d0610f13565b60006060600080612cf285612ed8565b91509150612d01612b34611100565b6060612d0b611100565b67ffffffffffffffff81118015612d2157600080fd5b50604051908082528060200260200182016040528015612d4b578160200160208202803683370190505b509050612bc6888381518110612d5d57fe5b6020026020010151888481518110612d7157fe5b602002602001015185612d826104f6565b6007546134cd565b600080612d978484612db6565b90506000612daa6129f48361271061252d565b90506123778282610d72565b600081612dcc5750670de0b6b3a76400006104dc565b82612dd9575060006104dc565b612dea600160ff1b84106006610f13565b82612e10770bce5086492111aea88f4bb1ca6bcf584181ea8059f7653284106007610f13565b826000670c7d713b49da000083138015612e315750670f43fc2c04ee000083125b15612e68576000612e418461356f565b9050670de0b6b3a764000080820784020583670de0b6b3a764000083050201915050612e76565b81612e7284613696565b0290505b670de0b6b3a76400009005612eae680238fd42c5cf03ffff198212801590612ea7575068070c1cc73b00c800008213155b6008610f13565b612eb781613a44565b9695505050505050565b600081831015612ed157816105a1565b5090919050565b60008082806020019051810190612eef919061431c565b909590945092505050565b600080612f1184612f0b8188610d84565b90612992565b9050612f2a6709b6e64a8ec60000821015610132610f13565b6000612f48612f41670de0b6b3a764000089611398565b8390612d8a565b90506000612f5f612f588361296c565b8a90612a23565b90506000612f6c8961296c565b90506000612f7a838361252d565b90506000612f888483610d84565b9050612fa7612fa0612f998a61296c565b8490612a23565b8290610d72565b9c9b505050505050505050505050565b6000818060200190518101906105a191906142ef565b60606000612fdb8484611398565b90506060855167ffffffffffffffff81118015612ff757600080fd5b50604051908082528060200260200182016040528015613021578160200160208202803683370190505b50905060005b8651811015613075576130568388838151811061304057fe5b6020026020010151612a2390919063ffffffff16565b82828151811061306257fe5b6020908102919091010152600101613027565b5095945050505050565b6060600082806020019051810190612eef91906142a8565b60006060845167ffffffffffffffff811180156130b357600080fd5b506040519080825280602002602001820160405280156130dd578160200160208202803683370190505b5090506000805b88518110156131a25761313d8982815181106130fc57fe5b6020026020010151612f0b89848151811061311357fe5b60200260200101518c858151811061312757fe5b6020026020010151610d8490919063ffffffff16565b83828151811061314957fe5b60200260200101818152505061319861319189838151811061316757fe5b602002602001015185848151811061317b57fe5b602002602001015161252d90919063ffffffff16565b8390610d72565b91506001016130e4565b50670de0b6b3a764000060005b895181101561329b5760008482815181106131c657fe5b602002602001015184111561321d5760006131ef6131e38661296c565b8d858151811061304057fe5b90506000613203828c868151811061312757fe5b9050613214613191611c138b61296c565b92505050613234565b88828151811061322957fe5b602002602001015190505b600061325d8c848151811061324557fe5b60200260200101516106b5848f878151811061312757fe5b905061328f6132888c858151811061327157fe5b6020026020010151836129d490919063ffffffff16565b8590612a23565b935050506001016131af565b506132af6132a88261296c565b879061252d565b9998505050505050505050565b60006060845167ffffffffffffffff811180156132d857600080fd5b50604051908082528060200260200182016040528015613302578160200160208202803683370190505b5090506000805b88518110156133aa5761336289828151811061332157fe5b60200260200101516106b589848151811061333857fe5b60200260200101518c858151811061334c57fe5b6020026020010151610d7290919063ffffffff16565b83828151811061336e57fe5b6020026020010181815250506133a061319189838151811061338c57fe5b602002602001015185848151811061304057fe5b9150600101613309565b50670de0b6b3a764000060005b895181101561348b576000838583815181106133cf57fe5b6020026020010151111561342b5760006133f46131e386670de0b6b3a7640000610d84565b90506000613408828c868151811061312757fe5b9050613422613191611f42670de0b6b3a76400008c610d84565b92505050613442565b88828151811061343757fe5b602002602001015190505b600061346b8c848151811061345357fe5b60200260200101516106b5848f878151811061334c57fe5b905061347f6132888c858151811061327157fe5b935050506001016133b7565b50670de0b6b3a764000081106134c1576134b76134b082670de0b6b3a7640000610d84565b8790612a23565b9350505050612377565b60009350505050612377565b6000806134de84612f0b8188610d72565b90506134f76729a2241af62c0000821115610133610f13565b600061350e612f41670de0b6b3a764000089612992565b9050600061352e61352783670de0b6b3a7640000610d84565b8a9061252d565b9050600061353b8961296c565b90506000613549838361252d565b905060006135578483610d84565b9050612fa7612fa06135688a61296c565b8490612992565b670de0b6b3a7640000026000806ec097ce7bc90715b34b9f1000000000808401906ec097ce7bc90715b34b9f0fffffffff19850102816135ab57fe5b05905060006ec097ce7bc90715b34b9f100000000082800205905081806ec097ce7bc90715b34b9f100000000081840205915060038205016ec097ce7bc90715b34b9f100000000082840205915060058205016ec097ce7bc90715b34b9f100000000082840205915060078205016ec097ce7bc90715b34b9f100000000082840205915060098205016ec097ce7bc90715b34b9f1000000000828402059150600b8205016ec097ce7bc90715b34b9f1000000000828402059150600d8205016ec097ce7bc90715b34b9f1000000000828402059150600f826002919005919091010295945050505050565b60006136a6600083136064610f13565b670de0b6b3a76400008212156136e1576136d7826ec097ce7bc90715b34b9f1000000000816136d157fe5b05613696565b60000390506106d5565b60007e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000831261373257770195e54c5dd42177f53a27172fa9ec630262827000000000830592506806f05b59d3b2000000015b73011798004d755d3c8bc8e03204cf44619e000000831261376a576b1425982cf597cd205cef7380830592506803782dace9d9000000015b606492830292026e01855144814a7ff805980ff008400083126137b2576e01855144814a7ff805980ff008400068056bc75e2d63100000840205925068ad78ebc5ac62000000015b6b02df0ab5a80a22c61ab5a70083126137ed576b02df0ab5a80a22c61ab5a70068056bc75e2d6310000084020592506856bc75e2d631000000015b693f1fce3da636ea5cf850831261382457693f1fce3da636ea5cf85068056bc75e2d631000008402059250682b5e3af16b18800000015b690127fa27722cc06cc5e2831261385b57690127fa27722cc06cc5e268056bc75e2d6310000084020592506815af1d78b58c400000015b68280e60114edb805d0383126138905768280e60114edb805d0368056bc75e2d631000008402059250680ad78ebc5ac6200000015b680ebc5fb4174612111083126138bb57680ebc5fb4174612111068056bc75e2d631000009384020592015b6808f00f760a4b2db55d83126138f0576808f00f760a4b2db55d68056bc75e2d6310000084020592506802b5e3af16b1880000015b6806f5f17757889379378312613925576806f5f177578893793768056bc75e2d63100000840205925068015af1d78b58c40000015b6806248f33704b2866038312613959576806248f33704b28660368056bc75e2d63100000840205925067ad78ebc5ac620000015b6805c548670b9510e7ac831261398d576805c548670b9510e7ac68056bc75e2d6310000084020592506756bc75e2d6310000015b600068056bc75e2d63100000840168056bc75e2d6310000080860302816139b057fe5b059050600068056bc75e2d63100000828002059050818068056bc75e2d63100000818402059150600382050168056bc75e2d63100000828402059150600582050168056bc75e2d63100000828402059150600782050168056bc75e2d63100000828402059150600982050168056bc75e2d63100000828402059150600b820501600202606485820105979650505050505050565b6000613a73680238fd42c5cf03ffff198312158015613a6c575068070c1cc73b00c800008313155b6009610f13565b6000821215613aa757613a8882600003613a44565b6ec097ce7bc90715b34b9f100000000081613a9f57fe5b0590506106d5565b60006806f05b59d3b20000008312613ae757506806f05b59d3b1ffffff1990910190770195e54c5dd42177f53a27172fa9ec630262827000000000613b1d565b6803782dace9d90000008312613b1957506803782dace9d8ffffff19909101906b1425982cf597cd205cef7380613b1d565b5060015b6064929092029168056bc75e2d6310000068ad78ebc5ac620000008412613b6d5768ad78ebc5ac61ffffff199093019268056bc75e2d631000006e01855144814a7ff805980ff008400082020590505b6856bc75e2d6310000008412613ba9576856bc75e2d630ffffff199093019268056bc75e2d631000006b02df0ab5a80a22c61ab5a70082020590505b682b5e3af16b188000008412613be357682b5e3af16b187fffff199093019268056bc75e2d63100000693f1fce3da636ea5cf85082020590505b6815af1d78b58c4000008412613c1d576815af1d78b58c3fffff199093019268056bc75e2d63100000690127fa27722cc06cc5e282020590505b680ad78ebc5ac62000008412613c5657680ad78ebc5ac61fffff199093019268056bc75e2d6310000068280e60114edb805d0382020590505b68056bc75e2d631000008412613c8f5768056bc75e2d630fffff199093019268056bc75e2d63100000680ebc5fb4174612111082020590505b6802b5e3af16b18800008412613cc8576802b5e3af16b187ffff199093019268056bc75e2d631000006808f00f760a4b2db55d82020590505b68015af1d78b58c400008412613d015768015af1d78b58c3ffff199093019268056bc75e2d631000006806f5f177578893793782020590505b68056bc75e2d631000008481019085906002908280020505918201919050600368056bc75e2d631000008783020505918201919050600468056bc75e2d631000008783020505918201919050600568056bc75e2d631000008783020505918201919050600668056bc75e2d631000008783020505918201919050600768056bc75e2d631000008783020505918201919050600868056bc75e2d631000008783020505918201919050600968056bc75e2d631000008783020505918201919050600a68056bc75e2d631000008783020505918201919050600b68056bc75e2d631000008783020505918201919050600c68056bc75e2d631000008783020505918201919050606468056bc75e2d63100000848402058502059695505050505050565b80356104dc81614708565b600082601f830112613e3d578081fd5b8151613e50613e4b826146e8565b6146c1565b818152915060208083019084810181840286018201871015613e7157600080fd5b60005b84811015613e9057815184529282019290820190600101613e74565b505050505092915050565b600082601f830112613eab578081fd5b813567ffffffffffffffff811115613ec1578182fd5b613ed4601f8201601f19166020016146c1565b9150808252836020828501011115613eeb57600080fd5b8060208401602084013760009082016020015292915050565b8035600281106104dc57600080fd5b600060208284031215613f24578081fd5b81356105a181614708565b60008060408385031215613f41578081fd5b8235613f4c81614708565b91506020830135613f5c81614708565b809150509250929050565b600080600060608486031215613f7b578081fd5b8335613f8681614708565b92506020840135613f9681614708565b929592945050506040919091013590565b600080600080600080600060e0888a031215613fc1578283fd5b8735613fcc81614708565b96506020880135613fdc81614708565b95506040880135945060608801359350608088013560ff81168114613fff578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561402e578182fd5b823561403981614708565b946020939093013593505050565b60008060006060848603121561405b578081fd5b835167ffffffffffffffff80821115614072578283fd5b818601915086601f830112614085578283fd5b8151614093613e4b826146e8565b80828252602080830192508086018b8283870289010111156140b3578788fd5b8796505b848710156140de5780516140ca81614708565b8452600196909601959281019281016140b7565b5089015190975093505050808211156140f5578283fd5b5061410286828701613e2d565b925050604084015190509250925092565b600060208284031215614124578081fd5b81356105a18161471d565b600060208284031215614140578081fd5b81516105a18161471d565b600080600080600080600060e0888a031215614165578081fd5b8735965060208089013561417881614708565b9650604089013561418881614708565b9550606089013567ffffffffffffffff808211156141a4578384fd5b818b0191508b601f8301126141b7578384fd5b81356141c5613e4b826146e8565b8082825285820191508585018f8788860288010111156141e3578788fd5b8795505b838610156142055780358352600195909501949186019186016141e7565b509850505060808b0135955060a08b0135945060c08b013592508083111561422b578384fd5b50506142398a828b01613e9b565b91505092959891949750929550565b600060208284031215614259578081fd5b81356001600160e01b0319811681146105a1578182fd5b600060208284031215614281578081fd5b81516105a181614708565b60006020828403121561429d578081fd5b81516105a18161472b565b6000806000606084860312156142bc578081fd5b83516142c78161472b565b602085015190935067ffffffffffffffff8111156142e3578182fd5b61410286828701613e2d565b60008060408385031215614301578182fd5b825161430c8161472b565b6020939093015192949293505050565b600080600060608486031215614330578081fd5b835161433b8161472b565b602085015160409095015190969495509392505050565b60008060408385031215614364578182fd5b825161436f8161472b565b602084015190925067ffffffffffffffff81111561438b578182fd5b61439785828601613e2d565b9150509250929050565b6000806000606084860312156143b5578081fd5b833567ffffffffffffffff808211156143cc578283fd5b81860191506101208083890312156143e2578384fd5b6143eb816146c1565b90506143f78884613f04565b81526144068860208501613e22565b60208201526144188860408501613e22565b6040820152606083013560608201526080830135608082015260a083013560a08201526144488860c08501613e22565b60c082015261445a8860e08501613e22565b60e08201526101008084013583811115614472578586fd5b61447e8a828701613e9b565b9183019190915250976020870135975060409096013595945050505050565b6000602082840312156144ae578081fd5b5035919050565b6000815180845260208085019450808401835b838110156144e4578151875295820195908201906001016144c8565b509495945050505050565b9182526001600160e01b031916602082015260240190565b6000828483379101908152919050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6000602082526105a160208301846144b5565b60006040825261456c60408301856144b5565b828103602084015261237781856144b5565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b8181101561467357858101830151858201604001528201614657565b818111156146845783604083870101525b50601f01601f1916929092016040019392505050565b600083825260406020830152611bb060408301846144b5565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156146e057600080fd5b604052919050565b600067ffffffffffffffff8211156146fe578081fd5b5060209081020190565b6001600160a01b03811681146104f357600080fd5b80151581146104f357600080fd5b600381106104f357600080fdfea2646970667358221220a2c3b62e0bc50507598395387e1557612d7ad59e817ddae4d5279907402fedb464736f6c63430007010033a26469706673582212201bcb3a953b00c5c4dcf4d3cf74f047f69d25320298f41e6f635cb029516f583764736f6c63430007010033",
+ "_disabled": [
{
"inputs": [],
"name": "getPauseConfiguration",
@@ -118,6 +121,5 @@
"stateMutability": "view",
"type": "function"
}
- ],
- "bytecode": "0x60c060405234801561001057600080fd5b5060405161604138038061604183398101604081905261002f9161004d565b60601b6001600160601b0319166080526276a700420160a05261007b565b60006020828403121561005e578081fd5b81516001600160a01b0381168114610074578182fd5b9392505050565b60805160601c60a051615f9c6100a56000398060d6528061010052508061015c5250615f9c6000f3fe60806040523480156200001157600080fd5b5060043610620000525760003560e01c80632da47c4014620000575780636634b753146200007a5780638d928af814620000a0578063fbce039314620000b9575b600080fd5b62000061620000d0565b6040516200007192919062000634565b60405180910390f35b620000916200008b366004620003c0565b6200013c565b60405162000071919062000562565b620000aa6200015a565b6040516200007191906200054e565b620000aa620000ca366004620003e6565b6200017e565b600080427f00000000000000000000000000000000000000000000000000000000000000008110156200012e57807f000000000000000000000000000000000000000000000000000000000000000003925062278d00915062000137565b60009250600091505b509091565b6001600160a01b031660009081526020819052604090205460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000090565b60008060006200018d620000d0565b9150915060006200019d6200015a565b8a8a8a8a8a88888c604051620001b3906200024b565b620001c7999897969594939291906200056d565b604051809103906000f080158015620001e4573d6000803e3d6000fd5b509050620001f281620001ff565b9998505050505050505050565b6001600160a01b038116600081815260208190526040808220805460ff19166001179055517f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc9190a250565b6158b680620006b183390190565b8035620002668162000697565b92915050565b600082601f8301126200027d578081fd5b8135620002946200028e826200066a565b62000642565b818152915060208083019084810181840286018201871015620002b657600080fd5b60005b84811015620002e2578135620002cf8162000697565b84529282019290820190600101620002b9565b505050505092915050565b600082601f830112620002fe578081fd5b81356200030f6200028e826200066a565b8181529150602080830190848101818402860182018710156200033157600080fd5b60005b84811015620002e25781358452928201929082019060010162000334565b600082601f83011262000363578081fd5b813567ffffffffffffffff8111156200037a578182fd5b6200038f601f8201601f191660200162000642565b9150808252836020828501011115620003a757600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215620003d2578081fd5b8135620003df8162000697565b9392505050565b60008060008060008060c08789031215620003ff578182fd5b863567ffffffffffffffff8082111562000417578384fd5b620004258a838b0162000352565b975060208901359150808211156200043b578384fd5b620004498a838b0162000352565b965060408901359150808211156200045f578384fd5b6200046d8a838b016200026c565b9550606089013591508082111562000483578384fd5b506200049289828a01620002ed565b93505060808701359150620004ab8860a0890162000259565b90509295509295509295565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015620004f557815187529582019590820190600101620004d7565b509495945050505050565b60008151808452815b81811015620005275760208185018101518683018201520162000509565b81811115620005395782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b60006101206001600160a01b038c16835260208181850152620005938285018d62000500565b91508382036040850152620005a9828c62000500565b84810360608601528a51808252828c01935090820190845b81811015620005e957620005d685516200068b565b83529383019391830191600101620005c1565b50508481036080860152620005ff818b620004c4565b93505050508560a08301528460c08301528360e083015262000626610100830184620004b7565b9a9950505050505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156200066257600080fd5b604052919050565b600067ffffffffffffffff82111562000681578081fd5b5060209081020190565b6001600160a01b031690565b6001600160a01b0381168114620006ad57600080fd5b5056fe6105006040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120523480156200003757600080fd5b50604051620058b6380380620058b68339810160408190526200005a9162000cf2565b88888888878787878785516002146200007557600162000078565b60025b6040805180820190915260018152603160f81b6020808301918252336080526001600160601b0319606087901b1660a0528b51908c0190812060c0529151902060e0527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6101005289518a918a918a918a918a918a918a91849184918a918a9162000107916003919062000abb565b5080516200011d90600490602084019062000abb565b50620001359150506276a70083111561019462000865565b6200014962278d0082111561019562000865565b42909101610140819052016101605284516200016b906002111560c862000865565b6200018360088651111560c96200086560201b60201c565b62000199856200087a60201b62000d571760201c565b620001a48462000886565b6040516309b2760f60e01b81526000906001600160a01b038b16906309b2760f90620001d5908c9060040162000eab565b602060405180830381600087803b158015620001f057600080fd5b505af115801562000205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022b919062000cd9565b9050896001600160a01b03166366a9c7d2828889516001600160401b03811180156200025657600080fd5b5060405190808252806020026020018201604052801562000281578160200160208202803683370190505b506040518463ffffffff1660e01b8152600401620002a29392919062000e0f565b600060405180830381600087803b158015620002bd57600080fd5b505af1158015620002d2573d6000803e3d6000fd5b5050506001600160601b031960608c901b1661018052506101a081905285516101c0528551620003045760006200031b565b856000815181106200031257fe5b60200260200101515b60601b6001600160601b0319166101e05285516001106200033e57600062000355565b856001815181106200034c57fe5b60200260200101515b60601b6001600160601b031916610200528551600210620003785760006200038f565b856002815181106200038657fe5b60200260200101515b60601b6001600160601b031916610220528551600310620003b2576000620003c9565b85600381518110620003c057fe5b60200260200101515b60601b6001600160601b031916610240528551600410620003ec57600062000403565b85600481518110620003fa57fe5b60200260200101515b60601b6001600160601b031916610260528551600510620004265760006200043d565b856005815181106200043457fe5b60200260200101515b60601b6001600160601b0319166102805285516006106200046057600062000477565b856006815181106200046e57fe5b60200260200101515b60601b6001600160601b0319166102a05285516007106200049a576000620004b1565b85600781518110620004a857fe5b60200260200101515b60601b6001600160601b0319166102c0528551620004d1576000620004f7565b620004f786600081518110620004e357fe5b6020026020010151620008f560201b60201c565b6102e05285516001106200050d5760006200051f565b6200051f86600181518110620004e357fe5b6103005285516002106200053557600062000547565b6200054786600281518110620004e357fe5b6103205285516003106200055d5760006200056f565b6200056f86600381518110620004e357fe5b6103405285516004106200058557600062000597565b6200059786600481518110620004e357fe5b610360528551600510620005ad576000620005bf565b620005bf86600581518110620004e357fe5b610380528551600610620005d5576000620005e7565b620005e786600681518110620004e357fe5b6103a0528551600710620005fd5760006200060f565b6200060f86600781518110620004e357fe5b6103c08181525050505050505050505050505050505050505050600086519050620006478187516200099760201b62000d651760201c565b6000806000805b848160ff161015620006cd5760008a8260ff16815181106200066c57fe5b6020026020010151905062000694662386f26fc1000082101561012e6200086560201b60201c565b620006ae8186620009a660201b62000d721790919060201c565b945082811115620006c3578160ff1693508092505b506001016200064e565b50620006e6670de0b6b3a7640000841461013462000865565b6103e08290528851620006fb57600062000712565b886000815181106200070957fe5b60200260200101515b610400528851600110620007285760006200073f565b886001815181106200073657fe5b60200260200101515b610420528851600210620007555760006200076c565b886002815181106200076357fe5b60200260200101515b6104405288516003106200078257600062000799565b886003815181106200079057fe5b60200260200101515b610460528851600410620007af576000620007c6565b88600481518110620007bd57fe5b60200260200101515b610480528851600510620007dc576000620007f3565b88600581518110620007ea57fe5b60200260200101515b6104a05288516006106200080957600062000820565b886006815181106200081757fe5b60200260200101515b6104c0528851600710620008365760006200084d565b886007815181106200084457fe5b60200260200101515b6104e0525062000f329b505050505050505050505050565b8162000876576200087681620009c3565b5050565b80620008768162000a16565b6200089b64e8d4a5100082101560cb62000865565b620008b367016345785d8a000082111560ca62000865565b60078190556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc90620008ea90839062000ec0565b60405180910390a150565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200093257600080fd5b505afa15801562000947573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096d919062000dec565b60ff16905060006200098c60128362000aa360201b62000d841760201c565b600a0a949350505050565b62000876828214606762000865565b6000828201620009ba848210158362000865565b90505b92915050565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b60028151101562000a275762000aa0565b60008160008151811062000a3757fe5b602002602001015190506000600190505b825181101562000a9d57600083828151811062000a6157fe5b6020026020010151905062000a92816001600160a01b0316846001600160a01b03161060656200086560201b60201c565b915060010162000a48565b50505b50565b600062000ab583831115600162000865565b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000afe57805160ff191683800117855562000b2e565b8280016001018555821562000b2e579182015b8281111562000b2e57825182559160200191906001019062000b11565b5062000b3c92915062000b40565b5090565b5b8082111562000b3c576000815560010162000b41565b8051620009bd8162000f1c565b600082601f83011262000b75578081fd5b815162000b8c62000b868262000ef0565b62000ec9565b81815291506020808301908481018184028601820187101562000bae57600080fd5b60005b8481101562000bda57815162000bc78162000f1c565b8452928201929082019060010162000bb1565b505050505092915050565b600082601f83011262000bf6578081fd5b815162000c0762000b868262000ef0565b81815291506020808301908481018184028601820187101562000c2957600080fd5b60005b8481101562000bda5781518452928201929082019060010162000c2c565b600082601f83011262000c5b578081fd5b81516001600160401b0381111562000c71578182fd5b602062000c87601f8301601f1916820162000ec9565b9250818352848183860101111562000c9e57600080fd5b60005b8281101562000cbe57848101820151848201830152810162000ca1565b8281111562000cd05760008284860101525b50505092915050565b60006020828403121562000ceb578081fd5b5051919050565b60008060008060008060008060006101208a8c03121562000d11578485fd5b62000d1d8b8b62000b57565b60208b01519099506001600160401b038082111562000d3a578687fd5b62000d488d838e0162000c4a565b995060408c015191508082111562000d5e578687fd5b62000d6c8d838e0162000c4a565b985060608c015191508082111562000d82578687fd5b62000d908d838e0162000b64565b975060808c015191508082111562000da6578687fd5b5062000db58c828d0162000be5565b95505060a08a0151935060c08a0151925060e08a0151915062000ddd8b6101008c0162000b57565b90509295985092959850929598565b60006020828403121562000dfe578081fd5b815160ff81168114620009ba578182fd5b60006060820185835260206060818501528186518084526080860191508288019350845b8181101562000e5b5762000e48855162000f10565b8352938301939183019160010162000e33565b505084810360408601528551808252908201925081860190845b8181101562000e9d5762000e8a835162000f10565b8552938301939183019160010162000e75565b509298975050505050505050565b602081016003831062000eba57fe5b91905290565b90815260200190565b6040518181016001600160401b038111828210171562000ee857600080fd5b604052919050565b60006001600160401b0382111562000f06578081fd5b5060209081020190565b6001600160a01b031690565b6001600160a01b038116811462000aa057600080fd5b60805160a05160601c60c05160e051610100516101205161014051610160516101805160601c6101a0516101c0516101e05160601c6102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c05160601c6102e05161030051610320516103405161036051610380516103a0516103c0516103e05161040051610420516104405161046051610480516104a0516104c0516104e05161476e6200114860003980611ec55280612857525080611e8252806127f6525080611e3f5280612795525080611dfc5280612734525080611db952806126d3525080611d765280612672525080611d335280612611525080611cf052806125b05250806122d0528061230452806123405250806116285280611b1e5250806115e55280611abd5250806115a25280611a5c52508061155f52806119fb52508061151c528061199a5250806114d9528061193952508061149652806118d85250806114455280611877525080611ae3528061281c525080611a8252806127bb525080611a21528061275a5250806119c052806126f952508061195f52806126985250806118fe528061263752508061189d52806125d652508061183c52806125755250806111025250806105d7525080610835525080610ef1525080610ecd525080610ab5525080610ff452508061103652508061101552508061081152508061079b525061476e6000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637ecebe001161010f578063a9059cbb116100a2578063d5c096c411610071578063d5c096c4146103e6578063d73dd623146103f9578063dd62ed3e1461040c578063f89f27ed1461041f576101f0565b8063a9059cbb146103b0578063aaabadc5146103c3578063c0ff1a15146103cb578063d505accf146103d3576101f0565b80638d928af8116100de5780638d928af81461038557806395d89b411461038d5780639b02cdde146103955780639d2c110c1461039d576101f0565b80637ecebe0014610337578063851c1bb31461034a57806387ec68171461035d578063893d20e814610370576101f0565b806338e9922e11610187578063661884631161015657806366188463146102e8578063679aefce146102fb57806370a082311461030357806374f3b00914610316576101f0565b806338e9922e146102a457806338fff2d0146102b757806355c67628146102bf5780636028bfd4146102c7576101f0565b80631c0de051116101c35780631c0de0511461025d57806323b872dd14610274578063313ce567146102875780633644e5151461029c576101f0565b806306fdde03146101f5578063095ea7b31461021357806316c38b3c1461023357806318160ddd14610248575b600080fd5b6101fd610434565b60405161020a9190614647565b60405180910390f35b61022661022136600461401c565b6104cb565b60405161020a919061457e565b610246610241366004614113565b6104e2565b005b6102506104f6565b60405161020a91906145a1565b6102656104fc565b60405161020a93929190614589565b610226610282366004613f67565b610525565b61028f6105a8565b60405161020a91906146b3565b6102506105ad565b6102466102b236600461449d565b6105bc565b6102506105d5565b6102506105f9565b6102da6102d536600461414b565b6105ff565b60405161020a92919061469a565b6102266102f636600461401c565b610636565b610250610690565b610250610311366004613f13565b6106bb565b61032961032436600461414b565b6106da565b60405161020a929190614559565b610250610345366004613f13565b61077c565b610250610358366004614248565b610797565b6102da61036b36600461414b565b6107e9565b61037861080f565b60405161020a9190614532565b610378610833565b6101fd610857565b6102506108b8565b6102506103ab3660046143a1565b6108be565b6102266103be36600461401c565b6109a5565b6103786109b2565b6102506109bc565b6102466103e1366004613fa7565b610a80565b6103296103f436600461414b565b610bc9565b61022661040736600461401c565b610cec565b61025061041a366004613f2f565b610d22565b610427610d4d565b60405161020a9190614546565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104c05780601f10610495576101008083540402835291602001916104c0565b820191906000526020600020905b8154815290600101906020018083116104a357829003601f168201915b505050505090505b90565b60006104d8338484610d9a565b5060015b92915050565b6104ea610e02565b6104f381610e30565b50565b60025490565b6000806000610509610eae565b159250610514610ecb565b915061051e610eef565b9050909192565b6001600160a01b0383166000818152600160209081526040808320338085529252822054919261056391148061055b5750838210155b610197610f13565b61056e858585610f21565b336001600160a01b0386161480159061058957506000198114155b1561059b5761059b8533858403610d9a565b60019150505b9392505050565b601290565b60006105b7610ff0565b905090565b6105c4610e02565b6105cc61108d565b6104f3816110a2565b7f000000000000000000000000000000000000000000000000000000000000000090565b60075490565b600060606106158651610610611100565b610d65565b61062a898989898989896111246111ec611252565b97509795505050505050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548083106106725761066d33856000610d9a565b610686565b61068633856106818487610d84565b610d9a565b5060019392505050565b60006105b761069d6104f6565b6106b56106a86109bc565b6106b0611100565b611374565b90611398565b6001600160a01b0381166000908152602081905260409020545b919050565b606080886107046106e9610833565b6001600160a01b0316336001600160a01b03161460cd610f13565b61071961070f6105d5565b82146101f4610f13565b60606107236113e9565b905061072f8882611666565b60006060806107438e8e8e8e8e8e8e611124565b9250925092506107538d846116c7565b61075d82856111ec565b61076781856111ec565b909550935050505b5097509795505050505050565b6001600160a01b031660009081526005602052604090205490565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016107cc9291906144ef565b604051602081830303815290604052805190602001209050919050565b600060606107fa8651610610611100565b61062a8989898989898961175a6117d7611252565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104c05780601f10610495576101008083540402835291602001916104c0565b60085490565b6000806108ce8560200151611838565b905060006108df8660400151611838565b90506000865160018111156108f057fe5b1415610956576109038660600151611b4d565b60608701526109128583611b71565b945061091e8482611b71565b935061092e866060015183611b71565b60608701526000610940878787611b7d565b905061094c8183611bb8565b93505050506105a1565b6109608583611b71565b945061096c8482611b71565b935061097c866060015182611b71565b6060870152600061098e878787611bc4565b905061099a8184611bf7565b905061094c81611c03565b60006104d8338484610f21565b60006105b7611c1a565b600060606109c8610833565b6001600160a01b031663f94d46686109de6105d5565b6040518263ffffffff1660e01b81526004016109fa91906145a1565b60006040518083038186803b158015610a1257600080fd5b505afa158015610a26573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a4e9190810190614047565b50915050610a6381610a5e6113e9565b611666565b6060610a6d611c94565b9050610a798183611ef1565b9250505090565b610a8e8442111560d1610f13565b6001600160a01b0387166000908152600560209081526040808320549051909291610ae5917f0000000000000000000000000000000000000000000000000000000000000000918c918c918c9188918d91016145c9565b6040516020818303038152906040528051906020012090506000610b0882611f63565b9050600060018288888860405160008152602001604052604051610b2f9493929190614629565b6020604051602081039080840390855afa158015610b51573d6000803e3d6000fd5b5050604051601f1901519150610b9390506001600160a01b03821615801590610b8b57508b6001600160a01b0316826001600160a01b0316145b6101f8610f13565b6001600160a01b038b166000908152600560205260409020600185019055610bbc8b8b8b610d9a565b5050505050505050505050565b60608088610bd86106e9610833565b610be361070f6105d5565b6060610bed6113e9565b9050610bf76104f6565b610c9d5760006060610c0b8d8d8d8a611f7f565b91509150610c20620f424083101560cc610f13565b610c2e6000620f424061201a565b610c3d8b620f4240840361201a565b610c4781846117d7565b80610c50611100565b67ffffffffffffffff81118015610c6657600080fd5b50604051908082528060200260200182016040528015610c90578160200160208202803683370190505b509550955050505061076f565b610ca78882611666565b6000606080610cbb8e8e8e8e8e8e8e61175a565b925092509250610ccb8c8461201a565b610cd582856117d7565b610cdf81856111ec565b909550935061076f915050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916104d89185906106819086610d72565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606105b7611c94565b80610d61816120b0565b5050565b610d618183146067610f13565b60008282016105a18482101583610f13565b6000610d94838311156001610f13565b50900390565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610df59085906145a1565b60405180910390a3505050565b6000610e196000356001600160e01b031916610797565b90506104f3610e288233612129565b610191610f13565b8015610e5057610e4b610e41610ecb565b4210610193610f13565b610e65565b610e65610e5b610eef565b42106101a9610f13565b6006805460ff19168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be6490610ea390839061457e565b60405180910390a150565b6000610eb8610eef565b4211806105b757505060065460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b81610d6157610d6181612219565b6001600160a01b038316600090815260208190526040902054610f4982821015610196610f13565b610f606001600160a01b0384161515610199610f13565b6001600160a01b03808516600090815260208190526040808220858503905591851681522054610f909083610d72565b6001600160a01b0380851660008181526020819052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610fe29086906145a1565b60405180910390a350505050565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061105d61226c565b306040516020016110729594939291906145fd565b60405160208183030381529060405280519060200120905090565b6110a0611098610eae565b610192610f13565b565b6110b564e8d4a5100082101560cb610f13565b6110cb67016345785d8a000082111560ca610f13565b60078190556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc90610ea39083906145a1565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006060806060611133611c94565b905061113d610eae565b1561117457600061114e828a611ef1565b905061115f8983600854848b612270565b925061116e8984610d84612380565b506111c0565b61117c611100565b67ffffffffffffffff8111801561119257600080fd5b506040519080825280602002602001820160405280156111bc578160200160208202803683370190505b5091505b6111cb8882876123eb565b90945092506111db888483612458565b600855509750975097945050505050565b60005b6111f7611100565b81101561124d5761122e83828151811061120d57fe5b602002602001015183838151811061122157fe5b6020026020010151612471565b83828151811061123a57fe5b60209081029190910101526001016111ef565b505050565b333014611310576000306001600160a01b0316600036604051611276929190614507565b6000604051808303816000865af19150503d80600081146112b3576040519150601f19603f3d011682016040523d82523d6000602084013e6112b8565b606091505b5050905080600081146112c757fe5b60046000803e6000516001600160e01b0319166343adbafb60e01b81146112f2573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b606061131a6113e9565b90506113268782611666565b6000606061133d8c8c8c8c8c8c8c8c63ffffffff16565b509150915061135081848663ffffffff16565b8051601f1982018390526343adbafb603f1983015260200260231982016044820181fd5b60008282026105a184158061139157508385838161138e57fe5b04145b6003610f13565b60006113a78215156004610f13565b826113b4575060006104dc565b670de0b6b3a7640000838102906113d7908583816113ce57fe5b04146005610f13565b8281816113e057fe5b049150506104dc565b606060006113f5611100565b905060608167ffffffffffffffff8111801561141057600080fd5b5060405190808252806020026020018201604052801561143a578160200160208202803683370190505b5090508115611482577f00000000000000000000000000000000000000000000000000000000000000008160008151811061147157fe5b60200260200101818152505061148b565b91506104c89050565b6001821115611482577f0000000000000000000000000000000000000000000000000000000000000000816001815181106114c257fe5b6020026020010181815250506002821115611482577f00000000000000000000000000000000000000000000000000000000000000008160028151811061150557fe5b6020026020010181815250506003821115611482577f00000000000000000000000000000000000000000000000000000000000000008160038151811061154857fe5b6020026020010181815250506004821115611482577f00000000000000000000000000000000000000000000000000000000000000008160048151811061158b57fe5b6020026020010181815250506005821115611482577f0000000000000000000000000000000000000000000000000000000000000000816005815181106115ce57fe5b6020026020010181815250506006821115611482577f00000000000000000000000000000000000000000000000000000000000000008160068151811061161157fe5b6020026020010181815250506007821115611482577f00000000000000000000000000000000000000000000000000000000000000008160078151811061165457fe5b60200260200101818152505091505090565b60005b611671611100565b81101561124d576116a883828151811061168757fe5b602002602001015183838151811061169b57fe5b6020026020010151611374565b8382815181106116b457fe5b6020908102919091010152600101611669565b6001600160a01b0382166000908152602081905260409020546116ef82821015610196610f13565b6001600160a01b038316600090815260208190526040902082820390556002546117199083610d84565b6002556040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610df59086906145a1565b600060608061176761108d565b6060611771611c94565b9050600061177f828a611ef1565b905060606117928a84600854858c612270565b90506117a18a82610d84612380565b600060606117b08c868b612491565b915091506117bf8c82876124eb565b600855909e909d50909b509950505050505050505050565b60005b6117e2611100565b81101561124d576118198382815181106117f857fe5b602002602001015183838151811061180c57fe5b60200260200101516124fa565b83828151811061182557fe5b60209081029190910101526001016117da565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561189b57507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156118fc57507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561195d57507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156119be57507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611a1f57507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611a8057507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611ae157507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611b4257507f00000000000000000000000000000000000000000000000000000000000000006106d5565b6106d5610135612219565b600080611b656007548461252d90919063ffffffff16565b90506105a18382610d84565b60006105a18383611374565b6000611b8761108d565b611bb083611b988660200151612571565b84611ba68860400151612571565b886060015161287b565b949350505050565b60006105a18383612471565b6000611bce61108d565b611bb083611bdf8660200151612571565b84611bed8860400151612571565b88606001516128f6565b60006105a183836124fa565b60006104dc611c1360075461296c565b8390612992565b6000611c24610833565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015611c5c57600080fd5b505afa158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190614270565b60606000611ca0611100565b905060608167ffffffffffffffff81118015611cbb57600080fd5b50604051908082528060200260200182016040528015611ce5578160200160208202803683370190505b5090508115611482577f000000000000000000000000000000000000000000000000000000000000000081600081518110611d1c57fe5b6020026020010181815250506001821115611482577f000000000000000000000000000000000000000000000000000000000000000081600181518110611d5f57fe5b6020026020010181815250506002821115611482577f000000000000000000000000000000000000000000000000000000000000000081600281518110611da257fe5b6020026020010181815250506003821115611482577f000000000000000000000000000000000000000000000000000000000000000081600381518110611de557fe5b6020026020010181815250506004821115611482577f000000000000000000000000000000000000000000000000000000000000000081600481518110611e2857fe5b6020026020010181815250506005821115611482577f000000000000000000000000000000000000000000000000000000000000000081600581518110611e6b57fe5b6020026020010181815250506006821115611482577f000000000000000000000000000000000000000000000000000000000000000081600681518110611eae57fe5b6020026020010181815250506007821115611482577f00000000000000000000000000000000000000000000000000000000000000008160078151811061165457fe5b670de0b6b3a764000060005b8351811015611f5357611f49611f42858381518110611f1857fe5b6020026020010151858481518110611f2c57fe5b60200260200101516129d490919063ffffffff16565b8390612a23565b9150600101611efd565b506104dc60008211610137610f13565b6000611f6d610ff0565b826040516020016107cc929190614517565b60006060611f8b61108d565b6000611f9684612a4f565b9050611fb16000826002811115611fa957fe5b1460ce610f13565b6060611fbc85612a65565b9050611fd0611fc9611100565b8251610d65565b611fdc81610a5e6113e9565b6060611fe6611c94565b90506000611ff48284611ef1565b90506000612004826106b0611100565b6008929092555099919850909650505050505050565b6001600160a01b03821660009081526020819052604090205461203d9082610d72565b6001600160a01b0383166000908152602081905260409020556002546120639082610d72565b6002556040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120a49085906145a1565b60405180910390a35050565b6002815110156120bf576104f3565b6000816000815181106120ce57fe5b602002602001015190506000600190505b825181101561124d5760008382815181106120f657fe5b6020026020010151905061211f816001600160a01b0316846001600160a01b0316106065610f13565b91506001016120df565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b61214861080f565b6001600160a01b031614158015612163575061216383612a7b565b1561218b5761217061080f565b6001600160a01b0316336001600160a01b03161490506104dc565b612193611c1a565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b81526004016121c2939291906145aa565b60206040518083038186803b1580156121da57600080fd5b505afa1580156121ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612212919061412f565b90506104dc565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b4690565b60608061227b611100565b67ffffffffffffffff8111801561229157600080fd5b506040519080825280602002602001820160405280156122bb578160200160208202803683370190505b509050826122ca579050612377565b61233d877f0000000000000000000000000000000000000000000000000000000000000000815181106122f957fe5b6020026020010151877f00000000000000000000000000000000000000000000000000000000000000008151811061232d57fe5b6020026020010151878787612a95565b817f00000000000000000000000000000000000000000000000000000000000000008151811061236957fe5b602090810291909101015290505b95945050505050565b60005b61238b611100565b8110156123e5576123c68482815181106123a157fe5b60200260200101518483815181106123b557fe5b60200260200101518463ffffffff16565b8482815181106123d257fe5b6020908102919091010152600101612383565b50505050565b6000606060006123fa84612a4f565b9050600081600281111561240a57fe5b14156124255761241b868686612b0d565b9250925050612450565b600181600281111561243357fe5b14156124435761241b8685612beb565b61241b868686612c1d565b505b935093915050565b60006124678484610d84612380565b611bb08285611ef1565b60006124808215156004610f13565b81838161248957fe5b049392505050565b6000606060006124a084612a4f565b905060018160028111156124b057fe5b14156124c15761241b868686612c88565b60028160028111156124cf57fe5b14156124e05761241b868686612ce2565b61244e610136612219565b60006124678484610d72612380565b60006125098215156004610f13565b82612516575060006104dc565b81600184038161252257fe5b0460010190506104dc565b600082820261254784158061139157508385838161138e57fe5b806125565760009150506104dc565b670de0b6b3a764000060001982015b046001019150506104dc565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156125d457507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561263557507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561269657507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156126f757507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561275857507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156127b957507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561281a57507f00000000000000000000000000000000000000000000000000000000000000006106d5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611b4257507f00000000000000000000000000000000000000000000000000000000000000006106d5565b600061289d61289287670429d069189e0000612a23565b831115610130610f13565b60006128a98784610d72565b905060006128b78883612992565b905060006128c58887611398565b905060006128d38383612d8a565b90506128e86128e18261296c565b8990612a23565b9a9950505050505050505050565b600061291861290d85670429d069189e0000612a23565b831115610131610f13565b600061292e6129278685610d84565b8690612992565b9050600061293c8588612992565b9050600061294a8383612d8a565b9050600061296082670de0b6b3a7640000610d84565b90506128e88a8261252d565b6000670de0b6b3a764000082106129845760006104dc565b50670de0b6b3a76400000390565b60006129a18215156004610f13565b826129ae575060006104dc565b670de0b6b3a7640000838102906129c8908583816113ce57fe5b82600182038161256557fe5b6000806129e18484612db6565b905060006129fb6129f48361271061252d565b6001610d72565b905080821015612a10576000925050506104dc565b612a1a8282610d84565b925050506104dc565b6000828202612a3d84158061139157508385838161138e57fe5b670de0b6b3a764000090049392505050565b6000818060200190518101906104dc919061428c565b6060818060200190518101906105a19190614352565b6000612a8d631c74c91760e11b610797565b909114919050565b6000838311612aa657506000612377565b6000612ab28585612992565b90506000612ac8670de0b6b3a764000088611398565b9050612adc826709b6e64a8ec60000612ec1565b91506000612aea8383612d8a565b90506000612b01612afa8361296c565b8b90612a23565b90506128e88187612a23565b60006060612b1961108d565b600080612b2585612ed8565b91509150612b3d612b34611100565b82106064610f13565b6060612b47611100565b67ffffffffffffffff81118015612b5d57600080fd5b50604051908082528060200260200182016040528015612b87578160200160208202803683370190505b509050612bc6888381518110612b9957fe5b6020026020010151888481518110612bad57fe5b602002602001015185612bbe6104f6565b600754612efa565b818381518110612bd257fe5b6020908102919091010152919791965090945050505050565b600060606000612bfa84612fb7565b90506060612c108683612c0b6104f6565b612fcd565b9196919550909350505050565b60006060612c2961108d565b60606000612c368561307f565b91509150612c478251610610611100565b612c5382610a5e6113e9565b6000612c6b888885612c636104f6565b600754613097565b9050612c7b8282111560cf610f13565b9791965090945050505050565b60006060806000612c988561307f565b91509150612cae612ca7611100565b8351610d65565b612cba82610a5e6113e9565b6000612cd2888885612cca6104f6565b6007546132bc565b9050612c7b8282101560d0610f13565b60006060600080612cf285612ed8565b91509150612d01612b34611100565b6060612d0b611100565b67ffffffffffffffff81118015612d2157600080fd5b50604051908082528060200260200182016040528015612d4b578160200160208202803683370190505b509050612bc6888381518110612d5d57fe5b6020026020010151888481518110612d7157fe5b602002602001015185612d826104f6565b6007546134cd565b600080612d978484612db6565b90506000612daa6129f48361271061252d565b90506123778282610d72565b600081612dcc5750670de0b6b3a76400006104dc565b82612dd9575060006104dc565b612dea600160ff1b84106006610f13565b82612e10770bce5086492111aea88f4bb1ca6bcf584181ea8059f7653284106007610f13565b826000670c7d713b49da000083138015612e315750670f43fc2c04ee000083125b15612e68576000612e418461356f565b9050670de0b6b3a764000080820784020583670de0b6b3a764000083050201915050612e76565b81612e7284613696565b0290505b670de0b6b3a76400009005612eae680238fd42c5cf03ffff198212801590612ea7575068070c1cc73b00c800008213155b6008610f13565b612eb781613a44565b9695505050505050565b600081831015612ed157816105a1565b5090919050565b60008082806020019051810190612eef919061431c565b909590945092505050565b600080612f1184612f0b8188610d84565b90612992565b9050612f2a6709b6e64a8ec60000821015610132610f13565b6000612f48612f41670de0b6b3a764000089611398565b8390612d8a565b90506000612f5f612f588361296c565b8a90612a23565b90506000612f6c8961296c565b90506000612f7a838361252d565b90506000612f888483610d84565b9050612fa7612fa0612f998a61296c565b8490612a23565b8290610d72565b9c9b505050505050505050505050565b6000818060200190518101906105a191906142ef565b60606000612fdb8484611398565b90506060855167ffffffffffffffff81118015612ff757600080fd5b50604051908082528060200260200182016040528015613021578160200160208202803683370190505b50905060005b8651811015613075576130568388838151811061304057fe5b6020026020010151612a2390919063ffffffff16565b82828151811061306257fe5b6020908102919091010152600101613027565b5095945050505050565b6060600082806020019051810190612eef91906142a8565b60006060845167ffffffffffffffff811180156130b357600080fd5b506040519080825280602002602001820160405280156130dd578160200160208202803683370190505b5090506000805b88518110156131a25761313d8982815181106130fc57fe5b6020026020010151612f0b89848151811061311357fe5b60200260200101518c858151811061312757fe5b6020026020010151610d8490919063ffffffff16565b83828151811061314957fe5b60200260200101818152505061319861319189838151811061316757fe5b602002602001015185848151811061317b57fe5b602002602001015161252d90919063ffffffff16565b8390610d72565b91506001016130e4565b50670de0b6b3a764000060005b895181101561329b5760008482815181106131c657fe5b602002602001015184111561321d5760006131ef6131e38661296c565b8d858151811061304057fe5b90506000613203828c868151811061312757fe5b9050613214613191611c138b61296c565b92505050613234565b88828151811061322957fe5b602002602001015190505b600061325d8c848151811061324557fe5b60200260200101516106b5848f878151811061312757fe5b905061328f6132888c858151811061327157fe5b6020026020010151836129d490919063ffffffff16565b8590612a23565b935050506001016131af565b506132af6132a88261296c565b879061252d565b9998505050505050505050565b60006060845167ffffffffffffffff811180156132d857600080fd5b50604051908082528060200260200182016040528015613302578160200160208202803683370190505b5090506000805b88518110156133aa5761336289828151811061332157fe5b60200260200101516106b589848151811061333857fe5b60200260200101518c858151811061334c57fe5b6020026020010151610d7290919063ffffffff16565b83828151811061336e57fe5b6020026020010181815250506133a061319189838151811061338c57fe5b602002602001015185848151811061304057fe5b9150600101613309565b50670de0b6b3a764000060005b895181101561348b576000838583815181106133cf57fe5b6020026020010151111561342b5760006133f46131e386670de0b6b3a7640000610d84565b90506000613408828c868151811061312757fe5b9050613422613191611f42670de0b6b3a76400008c610d84565b92505050613442565b88828151811061343757fe5b602002602001015190505b600061346b8c848151811061345357fe5b60200260200101516106b5848f878151811061334c57fe5b905061347f6132888c858151811061327157fe5b935050506001016133b7565b50670de0b6b3a764000081106134c1576134b76134b082670de0b6b3a7640000610d84565b8790612a23565b9350505050612377565b60009350505050612377565b6000806134de84612f0b8188610d72565b90506134f76729a2241af62c0000821115610133610f13565b600061350e612f41670de0b6b3a764000089612992565b9050600061352e61352783670de0b6b3a7640000610d84565b8a9061252d565b9050600061353b8961296c565b90506000613549838361252d565b905060006135578483610d84565b9050612fa7612fa06135688a61296c565b8490612992565b670de0b6b3a7640000026000806ec097ce7bc90715b34b9f1000000000808401906ec097ce7bc90715b34b9f0fffffffff19850102816135ab57fe5b05905060006ec097ce7bc90715b34b9f100000000082800205905081806ec097ce7bc90715b34b9f100000000081840205915060038205016ec097ce7bc90715b34b9f100000000082840205915060058205016ec097ce7bc90715b34b9f100000000082840205915060078205016ec097ce7bc90715b34b9f100000000082840205915060098205016ec097ce7bc90715b34b9f1000000000828402059150600b8205016ec097ce7bc90715b34b9f1000000000828402059150600d8205016ec097ce7bc90715b34b9f1000000000828402059150600f826002919005919091010295945050505050565b60006136a6600083136064610f13565b670de0b6b3a76400008212156136e1576136d7826ec097ce7bc90715b34b9f1000000000816136d157fe5b05613696565b60000390506106d5565b60007e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000831261373257770195e54c5dd42177f53a27172fa9ec630262827000000000830592506806f05b59d3b2000000015b73011798004d755d3c8bc8e03204cf44619e000000831261376a576b1425982cf597cd205cef7380830592506803782dace9d9000000015b606492830292026e01855144814a7ff805980ff008400083126137b2576e01855144814a7ff805980ff008400068056bc75e2d63100000840205925068ad78ebc5ac62000000015b6b02df0ab5a80a22c61ab5a70083126137ed576b02df0ab5a80a22c61ab5a70068056bc75e2d6310000084020592506856bc75e2d631000000015b693f1fce3da636ea5cf850831261382457693f1fce3da636ea5cf85068056bc75e2d631000008402059250682b5e3af16b18800000015b690127fa27722cc06cc5e2831261385b57690127fa27722cc06cc5e268056bc75e2d6310000084020592506815af1d78b58c400000015b68280e60114edb805d0383126138905768280e60114edb805d0368056bc75e2d631000008402059250680ad78ebc5ac6200000015b680ebc5fb4174612111083126138bb57680ebc5fb4174612111068056bc75e2d631000009384020592015b6808f00f760a4b2db55d83126138f0576808f00f760a4b2db55d68056bc75e2d6310000084020592506802b5e3af16b1880000015b6806f5f17757889379378312613925576806f5f177578893793768056bc75e2d63100000840205925068015af1d78b58c40000015b6806248f33704b2866038312613959576806248f33704b28660368056bc75e2d63100000840205925067ad78ebc5ac620000015b6805c548670b9510e7ac831261398d576805c548670b9510e7ac68056bc75e2d6310000084020592506756bc75e2d6310000015b600068056bc75e2d63100000840168056bc75e2d6310000080860302816139b057fe5b059050600068056bc75e2d63100000828002059050818068056bc75e2d63100000818402059150600382050168056bc75e2d63100000828402059150600582050168056bc75e2d63100000828402059150600782050168056bc75e2d63100000828402059150600982050168056bc75e2d63100000828402059150600b820501600202606485820105979650505050505050565b6000613a73680238fd42c5cf03ffff198312158015613a6c575068070c1cc73b00c800008313155b6009610f13565b6000821215613aa757613a8882600003613a44565b6ec097ce7bc90715b34b9f100000000081613a9f57fe5b0590506106d5565b60006806f05b59d3b20000008312613ae757506806f05b59d3b1ffffff1990910190770195e54c5dd42177f53a27172fa9ec630262827000000000613b1d565b6803782dace9d90000008312613b1957506803782dace9d8ffffff19909101906b1425982cf597cd205cef7380613b1d565b5060015b6064929092029168056bc75e2d6310000068ad78ebc5ac620000008412613b6d5768ad78ebc5ac61ffffff199093019268056bc75e2d631000006e01855144814a7ff805980ff008400082020590505b6856bc75e2d6310000008412613ba9576856bc75e2d630ffffff199093019268056bc75e2d631000006b02df0ab5a80a22c61ab5a70082020590505b682b5e3af16b188000008412613be357682b5e3af16b187fffff199093019268056bc75e2d63100000693f1fce3da636ea5cf85082020590505b6815af1d78b58c4000008412613c1d576815af1d78b58c3fffff199093019268056bc75e2d63100000690127fa27722cc06cc5e282020590505b680ad78ebc5ac62000008412613c5657680ad78ebc5ac61fffff199093019268056bc75e2d6310000068280e60114edb805d0382020590505b68056bc75e2d631000008412613c8f5768056bc75e2d630fffff199093019268056bc75e2d63100000680ebc5fb4174612111082020590505b6802b5e3af16b18800008412613cc8576802b5e3af16b187ffff199093019268056bc75e2d631000006808f00f760a4b2db55d82020590505b68015af1d78b58c400008412613d015768015af1d78b58c3ffff199093019268056bc75e2d631000006806f5f177578893793782020590505b68056bc75e2d631000008481019085906002908280020505918201919050600368056bc75e2d631000008783020505918201919050600468056bc75e2d631000008783020505918201919050600568056bc75e2d631000008783020505918201919050600668056bc75e2d631000008783020505918201919050600768056bc75e2d631000008783020505918201919050600868056bc75e2d631000008783020505918201919050600968056bc75e2d631000008783020505918201919050600a68056bc75e2d631000008783020505918201919050600b68056bc75e2d631000008783020505918201919050600c68056bc75e2d631000008783020505918201919050606468056bc75e2d63100000848402058502059695505050505050565b80356104dc81614708565b600082601f830112613e3d578081fd5b8151613e50613e4b826146e8565b6146c1565b818152915060208083019084810181840286018201871015613e7157600080fd5b60005b84811015613e9057815184529282019290820190600101613e74565b505050505092915050565b600082601f830112613eab578081fd5b813567ffffffffffffffff811115613ec1578182fd5b613ed4601f8201601f19166020016146c1565b9150808252836020828501011115613eeb57600080fd5b8060208401602084013760009082016020015292915050565b8035600281106104dc57600080fd5b600060208284031215613f24578081fd5b81356105a181614708565b60008060408385031215613f41578081fd5b8235613f4c81614708565b91506020830135613f5c81614708565b809150509250929050565b600080600060608486031215613f7b578081fd5b8335613f8681614708565b92506020840135613f9681614708565b929592945050506040919091013590565b600080600080600080600060e0888a031215613fc1578283fd5b8735613fcc81614708565b96506020880135613fdc81614708565b95506040880135945060608801359350608088013560ff81168114613fff578384fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561402e578182fd5b823561403981614708565b946020939093013593505050565b60008060006060848603121561405b578081fd5b835167ffffffffffffffff80821115614072578283fd5b818601915086601f830112614085578283fd5b8151614093613e4b826146e8565b80828252602080830192508086018b8283870289010111156140b3578788fd5b8796505b848710156140de5780516140ca81614708565b8452600196909601959281019281016140b7565b5089015190975093505050808211156140f5578283fd5b5061410286828701613e2d565b925050604084015190509250925092565b600060208284031215614124578081fd5b81356105a18161471d565b600060208284031215614140578081fd5b81516105a18161471d565b600080600080600080600060e0888a031215614165578081fd5b8735965060208089013561417881614708565b9650604089013561418881614708565b9550606089013567ffffffffffffffff808211156141a4578384fd5b818b0191508b601f8301126141b7578384fd5b81356141c5613e4b826146e8565b8082825285820191508585018f8788860288010111156141e3578788fd5b8795505b838610156142055780358352600195909501949186019186016141e7565b509850505060808b0135955060a08b0135945060c08b013592508083111561422b578384fd5b50506142398a828b01613e9b565b91505092959891949750929550565b600060208284031215614259578081fd5b81356001600160e01b0319811681146105a1578182fd5b600060208284031215614281578081fd5b81516105a181614708565b60006020828403121561429d578081fd5b81516105a18161472b565b6000806000606084860312156142bc578081fd5b83516142c78161472b565b602085015190935067ffffffffffffffff8111156142e3578182fd5b61410286828701613e2d565b60008060408385031215614301578182fd5b825161430c8161472b565b6020939093015192949293505050565b600080600060608486031215614330578081fd5b835161433b8161472b565b602085015160409095015190969495509392505050565b60008060408385031215614364578182fd5b825161436f8161472b565b602084015190925067ffffffffffffffff81111561438b578182fd5b61439785828601613e2d565b9150509250929050565b6000806000606084860312156143b5578081fd5b833567ffffffffffffffff808211156143cc578283fd5b81860191506101208083890312156143e2578384fd5b6143eb816146c1565b90506143f78884613f04565b81526144068860208501613e22565b60208201526144188860408501613e22565b6040820152606083013560608201526080830135608082015260a083013560a08201526144488860c08501613e22565b60c082015261445a8860e08501613e22565b60e08201526101008084013583811115614472578586fd5b61447e8a828701613e9b565b9183019190915250976020870135975060409096013595945050505050565b6000602082840312156144ae578081fd5b5035919050565b6000815180845260208085019450808401835b838110156144e4578151875295820195908201906001016144c8565b509495945050505050565b9182526001600160e01b031916602082015260240190565b6000828483379101908152919050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6000602082526105a160208301846144b5565b60006040825261456c60408301856144b5565b828103602084015261237781856144b5565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b8181101561467357858101830151858201604001528201614657565b818111156146845783604083870101525b50601f01601f1916929092016040019392505050565b600083825260406020830152611bb060408301846144b5565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156146e057600080fd5b604052919050565b600067ffffffffffffffff8211156146fe578081fd5b5060209081020190565b6001600160a01b03811681146104f357600080fd5b80151581146104f357600080fd5b600381106104f357600080fdfea2646970667358221220a2c3b62e0bc50507598395387e1557612d7ad59e817ddae4d5279907402fedb464736f6c63430007010033a26469706673582212201bcb3a953b00c5c4dcf4d3cf74f047f69d25320298f41e6f635cb029516f583764736f6c63430007010033"
-}
\ No newline at end of file
+ ]
+}
diff --git a/crates/contracts/artifacts/BalancerV2WeightedPoolFactoryV3.json b/contracts/artifacts/BalancerV2WeightedPoolFactoryV3.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV2WeightedPoolFactoryV3.json
rename to contracts/artifacts/BalancerV2WeightedPoolFactoryV3.json
index 17bfe6a1b4..2ad632b064 100644
--- a/crates/contracts/artifacts/BalancerV2WeightedPoolFactoryV3.json
+++ b/contracts/artifacts/BalancerV2WeightedPoolFactoryV3.json
@@ -101,6 +101,21 @@
"stateMutability": "nonpayable",
"type": "function"
},
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
{
"inputs": [
{
@@ -252,19 +267,6 @@
],
"stateMutability": "view",
"type": "function"
- },
- {
- "inputs": [],
- "name": "version",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
}
]
}
diff --git a/contracts/artifacts/BalancerV2WeightedPoolFactoryV4.json b/contracts/artifacts/BalancerV2WeightedPoolFactoryV4.json
new file mode 100644
index 0000000000..2ad632b064
--- /dev/null
+++ b/contracts/artifacts/BalancerV2WeightedPoolFactoryV4.json
@@ -0,0 +1,272 @@
+{
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "vault",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IProtocolFeePercentagesProvider",
+ "name": "protocolFeeProvider",
+ "type": "address"
+ },
+ {
+ "internalType": "string",
+ "name": "factoryVersion",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "poolVersion",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [],
+ "name": "FactoryDisabled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ }
+ ],
+ "name": "PoolCreated",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "contract IERC20[]",
+ "name": "tokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "normalizedWeights",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "contract IRateProvider[]",
+ "name": "rateProviders",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "swapFeePercentage",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "create",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "disable",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "version",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4"
+ }
+ ],
+ "name": "getActionId",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getAuthorizer",
+ "outputs": [
+ {
+ "internalType": "contract IAuthorizer",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getCreationCode",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getCreationCodeContracts",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "contractA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "contractB",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPauseConfiguration",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "pauseWindowDuration",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "bufferPeriodDuration",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPoolVersion",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getProtocolFeePercentagesProvider",
+ "outputs": [
+ {
+ "internalType": "contract IProtocolFeePercentagesProvider",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getVault",
+ "outputs": [
+ {
+ "internalType": "contract IVault",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "isDisabled",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ }
+ ],
+ "name": "isPoolFromFactory",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ]
+}
diff --git a/crates/contracts/artifacts/BalancerV3BatchRouter.json b/contracts/artifacts/BalancerV3BatchRouter.json
similarity index 99%
rename from crates/contracts/artifacts/BalancerV3BatchRouter.json
rename to contracts/artifacts/BalancerV3BatchRouter.json
index 645cf4e136..1f6d35c66b 100644
--- a/crates/contracts/artifacts/BalancerV3BatchRouter.json
+++ b/contracts/artifacts/BalancerV3BatchRouter.json
@@ -129,146 +129,177 @@
"name": "TransientIndexOutOfBounds",
"type": "error"
},
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ },
{
"inputs": [],
- "name": "getSender",
+ "name": "version",
"outputs": [
{
- "internalType": "address",
+ "internalType": "string",
"name": "",
- "type": "address"
+ "type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "bytes[]",
- "name": "data",
- "type": "bytes[]"
- }
- ],
- "name": "multicall",
- "outputs": [
- {
- "internalType": "bytes[]",
- "name": "results",
- "type": "bytes[]"
- }
- ],
- "stateMutability": "payable",
- "type": "function"
- },
{
"inputs": [
{
"components": [
{
- "internalType": "address",
- "name": "token",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "spender",
+ "internalType": "contract IERC20",
+ "name": "tokenIn",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
+ "components": [
+ {
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20",
+ "name": "tokenOut",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "isBuffer",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct IBatchRouter.SwapPathStep[]",
+ "name": "steps",
+ "type": "tuple[]"
},
{
"internalType": "uint256",
- "name": "nonce",
+ "name": "exactAmountIn",
"type": "uint256"
},
{
"internalType": "uint256",
- "name": "deadline",
+ "name": "minAmountOut",
"type": "uint256"
}
],
- "internalType": "struct IRouterCommon.PermitApproval[]",
- "name": "permitBatch",
+ "internalType": "struct IBatchRouter.SwapPathExactAmountIn[]",
+ "name": "paths",
"type": "tuple[]"
},
{
- "internalType": "bytes[]",
- "name": "permitSignatures",
- "type": "bytes[]"
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "userData",
+ "type": "bytes"
+ }
+ ],
+ "name": "querySwapExactIn",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "pathAmountsOut",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "tokensOut",
+ "type": "address[]"
},
+ {
+ "internalType": "uint256[]",
+ "name": "amountsOut",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
{
"components": [
+ {
+ "internalType": "contract IERC20",
+ "name": "tokenIn",
+ "type": "address"
+ },
{
"components": [
{
"internalType": "address",
- "name": "token",
+ "name": "pool",
"type": "address"
},
{
- "internalType": "uint160",
- "name": "amount",
- "type": "uint160"
- },
- {
- "internalType": "uint48",
- "name": "expiration",
- "type": "uint48"
+ "internalType": "contract IERC20",
+ "name": "tokenOut",
+ "type": "address"
},
{
- "internalType": "uint48",
- "name": "nonce",
- "type": "uint48"
+ "internalType": "bool",
+ "name": "isBuffer",
+ "type": "bool"
}
],
- "internalType": "struct IAllowanceTransfer.PermitDetails[]",
- "name": "details",
+ "internalType": "struct IBatchRouter.SwapPathStep[]",
+ "name": "steps",
"type": "tuple[]"
},
{
- "internalType": "address",
- "name": "spender",
- "type": "address"
+ "internalType": "uint256",
+ "name": "maxAmountIn",
+ "type": "uint256"
},
{
"internalType": "uint256",
- "name": "sigDeadline",
+ "name": "exactAmountOut",
"type": "uint256"
}
],
- "internalType": "struct IAllowanceTransfer.PermitBatch",
- "name": "permit2Batch",
- "type": "tuple"
+ "internalType": "struct IBatchRouter.SwapPathExactAmountOut[]",
+ "name": "paths",
+ "type": "tuple[]"
},
{
- "internalType": "bytes",
- "name": "permit2Signature",
- "type": "bytes"
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
},
{
- "internalType": "bytes[]",
- "name": "multicallData",
- "type": "bytes[]"
+ "internalType": "bytes",
+ "name": "userData",
+ "type": "bytes"
}
],
- "name": "permitBatchAndCall",
+ "name": "querySwapExactOut",
"outputs": [
{
- "internalType": "bytes[]",
- "name": "results",
- "type": "bytes[]"
+ "internalType": "uint256[]",
+ "name": "pathAmountsIn",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "tokensIn",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "amountsIn",
+ "type": "uint256[]"
}
],
- "stateMutability": "payable",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -318,9 +349,14 @@
"type": "tuple[]"
},
{
- "internalType": "address",
- "name": "sender",
- "type": "address"
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "wethIsEth",
+ "type": "bool"
},
{
"internalType": "bytes",
@@ -328,7 +364,7 @@
"type": "bytes"
}
],
- "name": "querySwapExactIn",
+ "name": "swapExactIn",
"outputs": [
{
"internalType": "uint256[]",
@@ -346,7 +382,7 @@
"type": "uint256[]"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "payable",
"type": "function"
},
{
@@ -354,94 +390,120 @@
{
"components": [
{
- "internalType": "address",
- "name": "sender",
+ "internalType": "contract IERC20",
+ "name": "tokenIn",
"type": "address"
},
{
"components": [
{
- "internalType": "contract IERC20",
- "name": "tokenIn",
+ "internalType": "address",
+ "name": "pool",
"type": "address"
},
{
- "components": [
- {
- "internalType": "address",
- "name": "pool",
- "type": "address"
- },
- {
- "internalType": "contract IERC20",
- "name": "tokenOut",
- "type": "address"
- },
- {
- "internalType": "bool",
- "name": "isBuffer",
- "type": "bool"
- }
- ],
- "internalType": "struct IBatchRouter.SwapPathStep[]",
- "name": "steps",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "exactAmountIn",
- "type": "uint256"
+ "internalType": "contract IERC20",
+ "name": "tokenOut",
+ "type": "address"
},
{
- "internalType": "uint256",
- "name": "minAmountOut",
- "type": "uint256"
+ "internalType": "bool",
+ "name": "isBuffer",
+ "type": "bool"
}
],
- "internalType": "struct IBatchRouter.SwapPathExactAmountIn[]",
- "name": "paths",
+ "internalType": "struct IBatchRouter.SwapPathStep[]",
+ "name": "steps",
"type": "tuple[]"
},
{
"internalType": "uint256",
- "name": "deadline",
+ "name": "maxAmountIn",
"type": "uint256"
},
{
- "internalType": "bool",
- "name": "wethIsEth",
- "type": "bool"
- },
- {
- "internalType": "bytes",
- "name": "userData",
- "type": "bytes"
+ "internalType": "uint256",
+ "name": "exactAmountOut",
+ "type": "uint256"
}
],
- "internalType": "struct IBatchRouter.SwapExactInHookParams",
- "name": "params",
- "type": "tuple"
+ "internalType": "struct IBatchRouter.SwapPathExactAmountOut[]",
+ "name": "paths",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "wethIsEth",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes",
+ "name": "userData",
+ "type": "bytes"
}
],
- "name": "querySwapExactInHook",
+ "name": "swapExactOut",
"outputs": [
{
"internalType": "uint256[]",
- "name": "pathAmountsOut",
+ "name": "pathAmountsIn",
"type": "uint256[]"
},
{
"internalType": "address[]",
- "name": "tokensOut",
+ "name": "tokensIn",
"type": "address[]"
},
{
"internalType": "uint256[]",
- "name": "amountsOut",
+ "name": "amountsIn",
"type": "uint256[]"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "payable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x6101c0604090808252346105c957614bbd803803809161001f82856105e8565b83398101916080828403126105c95781516001600160a01b03939084811681036105c957602093848101519286841684036105c9578482015196871687036105c95760608201516001600160401b03928382116105c9570192601f908282860112156105c95784518481116105b557601f19958851946100a58b898786011601876105e8565b8286528a83830101116105c957815f928b8093018388015e8501015260805281519283116105b5575f54916001928381811c911680156105ab575b8982101461059757828111610554575b50879184116001146104f757839450908392915f946104ec575b50501b915f199060031b1c1916175f555b61014961012661060b565b835190610132826105cd565b600682526539b2b73232b960d11b86830152610669565b60a05261018561015761060b565b835190610163826105cd565b60118252701a5cd4995d1d5c9b915d1a131bd8dad959607a1b86830152610669565b60c05260e0526101009283526101cd815161019f816105cd565b601381527f63757272656e7453776170546f6b656e73496e0000000000000000000000000084820152610633565b9161012092835261021082516101e2816105cd565b601481527f63757272656e7453776170546f6b656e734f757400000000000000000000000083820152610633565b6101409081526102528351610224816105cd565b601981527f63757272656e7453776170546f6b656e496e416d6f756e74730000000000000084820152610633565b906101609182526102d8610298855161026a816105cd565b601a81527f63757272656e7453776170546f6b656e4f7574416d6f756e747300000000000086820152610633565b936101809485527f736574746c6564546f6b656e416d6f756e7473000000000000000000000000008651916102cc836105cd565b60138352820152610633565b936101a094855251946144a1968761071c88396080518781816102460152818161197c01528181611be001528181611e22015281816120790152818161221201528181612323015281816123b10152818161247301528181612aad01528181612c8c01528181612cd401528181612d5201528181612df901528181612f0701528181612f840152818161321901528181613348015281816133e5015281816134ab01528181613b6c01528181613c9101528181613ed0015281816140150152614271015260a0518781816102aa015281816105350152818161181f01526128be015260c0518781816117a901526136ba015260e051878181602201528181613afe01528181613de401528181613f5801526140af0152518681816109f001528181610b0401528181611f6e01528181611ff4015281816130790152613c6d015251858181612569015281816127500152818161295a01526135d8015251848181611c4301528181611e8f01528181612275015281816124d7015281816125ce0152818161272c01528181612b1201526135a8015251838181611d43015281816125950152818161277c0152818161328e01528181613509015261362b015251828181611c6c01528181611ec00152818161250101528181612621015281816127b401528181612b5101526132d001525181818161229f015281816125ff01528181612b8201528181612e5601526136090152f35b015192505f8061010a565b91938316915f805283885f20935f5b8a8883831061053d5750505010610525575b505050811b015f5561011b565b01515f1960f88460031b161c191690555f8080610518565b868601518855909601959485019487935001610506565b5f8052885f208380870160051c8201928b881061058e575b0160051c019084905b8281106105835750506100f0565b5f8155018490610575565b9250819261056c565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100e0565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b604081019081106001600160401b038211176105b557604052565b601f909101601f19168101906001600160401b038211908210176105b557604052565b60405190610618826105cd565b600c82526b2937baba32b921b7b6b6b7b760a11b6020830152565b61066690604051610643816105cd565b60118152702130ba31b42937baba32b921b7b6b6b7b760791b6020820152610669565b90565b906106d6603a60209260405193849181808401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952805191829101603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a8101845201826105e8565b5190205f198101908111610707576040519060208201908152602082526106fc826105cd565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe60806040526004361015610072575b3615610018575f80fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361004a57005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c806308a465f614610e9d57806319c6989f1461084e578063286f580d146107b75780632950286e146106cc57806354fd4d501461058f5780635a3c3987146105665780635e01eb5a146105215780638a12a08c146104c65780638eb1b65e146103bf578063945ed33f14610344578063ac9650d8146103005763e3b5dff40361000e57346102fc576060806003193601126102fc5767ffffffffffffffff6004358181116102fc5761012d9036906004016112c4565b6101356111a1565b6044359283116102fc57610150610158933690600401610fcd565b9390916128b9565b905f5b835181101561017c57805f8761017360019488611691565b5101520161015b565b506101f06101fe610239946101b65f94886040519361019a8561111a565b30855260208501525f1960408501528660608501523691611381565b60808201526040519283917f8a12a08c0000000000000000000000000000000000000000000000000000000060208401526024830161143e565b03601f198101835282611152565b604051809481927fedfa3568000000000000000000000000000000000000000000000000000000008352602060048401526024830190610ffb565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19182156102f1576102a39261028e915f916102cf575b50602080825183010191016115d4565b909391926102a7575b60405193849384610f2f565b0390f35b5f7f00000000000000000000000000000000000000000000000000000000000000005d610297565b6102eb91503d805f833e6102e38183611152565b81019061154d565b8461027e565b6040513d5f823e3d90fd5b5f80fd5b60206003193601126102fc5760043567ffffffffffffffff81116102fc576103386103326102a3923690600401610f9c565b9061179b565b60405191829182611020565b346102fc5761035236610eca565b61035a611945565b610362611972565b6103906102a3610371836128fb565b9193909461038a606061038383611344565b9201611358565b90612729565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d60405193849384610f2f565b60806003193601126102fc5767ffffffffffffffff6004358181116102fc576103ec9036906004016112c4565b906103f56111b7565b906064359081116102fc576101f061048b6102399461045161041c5f953690600401610fcd565b610425336128b9565b97604051946104338661111a565b33865260208601526024356040860152151560608501523691611381565b60808201526040519283917f945ed33f000000000000000000000000000000000000000000000000000000006020840152602483016116d2565b604051809481927f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190610ffb565b346102fc576102a36104ef6104da36610eca565b6104e2611945565b6104ea611972565b611a3b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f009492945d60405193849384610f2f565b346102fc575f6003193601126102fc5760207f00000000000000000000000000000000000000000000000000000000000000005c6001600160a01b0360405191168152f35b346102fc576102a36104ef61057a36610eca565b610582611945565b61058a611972565b6128fb565b346102fc575f6003193601126102fc576040515f80549060018260011c91600184169182156106c2575b60209485851084146106955785879486865291825f146106575750506001146105fe575b506105ea92500383611152565b6102a3604051928284938452830190610ffb565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b85831061063f5750506105ea9350820101856105dd565b80548389018501528794508693909201918101610628565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858201526105ea95151560051b85010192508791506105dd9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926105b9565b346102fc5760606003193601126102fc5767ffffffffffffffff6004358181116102fc576106fe9036906004016112c4565b906107076111a1565b6044359182116102fc5761072261072a923690600401610fcd565b9290916128b9565b905f5b845181101561075f57806fffffffffffffffffffffffffffffffff604061075660019489611691565b5101520161072d565b506101f06101fe8561077d5f94610239976040519361019a8561111a565b60808201526040519283917f5a3c3987000000000000000000000000000000000000000000000000000000006020840152602483016116d2565b60806003193601126102fc5767ffffffffffffffff6004358181116102fc576107e49036906004016112c4565b906107ed6111b7565b906064359081116102fc576101f061048b6102399461081461041c5f953690600401610fcd565b60808201526040519283917f08a465f60000000000000000000000000000000000000000000000000000000060208401526024830161143e565b60a06003193601126102fc5767ffffffffffffffff600435116102fc573660236004350112156102fc5767ffffffffffffffff60043560040135116102fc5736602460c060043560040135026004350101116102fc5760243567ffffffffffffffff81116102fc576108c4903690600401610f9c565b67ffffffffffffffff604435116102fc576060600319604435360301126102fc5760643567ffffffffffffffff81116102fc57610905903690600401610fcd565b60843567ffffffffffffffff81116102fc57610925903690600401610f9c565b949093610930611945565b806004356004013503610e75575f5b600435600401358110610bd25750505060443560040135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd6044353603018212156102fc57816044350160048101359067ffffffffffffffff82116102fc5760248260071b36039101136102fc576109e3575b6102a361033886865f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d61179b565b6001600160a01b039492947f0000000000000000000000000000000000000000000000000000000000000000163b156102fc57604051947f2a2d80d10000000000000000000000000000000000000000000000000000000086523360048701526060602487015260c486019260443501602481019367ffffffffffffffff6004830135116102fc57600482013560071b360385136102fc5760606064890152600482013590529192869260e484019291905f905b60048101358210610b5457505050602091601f19601f865f9787956001600160a01b03610ac860246044350161118d565b16608488015260448035013560a48801526003198787030160448801528186528786013787868286010152011601030181836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19182156102f1576102a39361033893610b45575b8294508193506109b3565b610b4e90611106565b84610b3a565b9195945091926001600160a01b03610b6b8761118d565b168152602080870135916001600160a01b0383168093036102fc57600492600192820152610b9b604089016128a6565b65ffffffffffff8091166040830152610bb660608a016128a6565b1660608201526080809101970193019050889495939291610a97565b610be7610be082848661192a565b3691611381565b604051610bf3816110a1565b5f81526020915f838301525f60408301528281015190606060408201519101515f1a91835283830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc81850260043501360301126102fc5760405190610c60826110ea565b610c73602460c08602600435010161118d565b808352610c89604460c08702600435010161118d565b908185850152610ca2606460c08802600435010161118d565b60408581019190915260043560c08802016084810135606087015260a4810135608087015260c4013560a086015283015183519386015160ff91909116926001600160a01b0383163b156102fc575f6001600160a01b03809460e4948b98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081610e66575b50610e5c57610d7f612877565b906001600160a01b0381511690836001600160a01b0381830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa9182156102f1575f92610e2c575b506060015103610df75750506001905b0161093f565b805115610e045780519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091508381813d8311610e55575b610e448183611152565b810103126102fc5751906060610de1565b503d610e3a565b5050600190610df1565b610e6f90611106565b8a610d72565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fc57610eab36610eca565b610eb3611945565b610ebb611972565b6103906102a361037183611a3b565b600319906020828201126102fc576004359167ffffffffffffffff83116102fc578260a0920301126102fc5760040190565b9081518082526020808093019301915f5b828110610f1b575050505090565b835185529381019392810192600101610f0d565b939290610f4490606086526060860190610efc565b936020948181036020830152602080855192838152019401905f5b818110610f7f57505050610f7c9394506040818403910152610efc565b90565b82516001600160a01b031686529487019491870191600101610f5f565b9181601f840112156102fc5782359167ffffffffffffffff83116102fc576020808501948460051b0101116102fc57565b9181601f840112156102fc5782359167ffffffffffffffff83116102fc57602083818601950101116102fc57565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106110555750505050505090565b9091929394958480611091837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51610ffb565b9801930193019194939290611045565b6060810190811067ffffffffffffffff8211176110bd57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60c0810190811067ffffffffffffffff8211176110bd57604052565b67ffffffffffffffff81116110bd57604052565b60a0810190811067ffffffffffffffff8211176110bd57604052565b60e0810190811067ffffffffffffffff8211176110bd57604052565b90601f601f19910116810190811067ffffffffffffffff8211176110bd57604052565b67ffffffffffffffff81116110bd5760051b60200190565b35906001600160a01b03821682036102fc57565b602435906001600160a01b03821682036102fc57565b6044359081151582036102fc57565b9190916080818403126102fc57604090815191608083019467ffffffffffffffff95848110878211176110bd57825283956112008461118d565b8552602090818501359081116102fc57840182601f820112156102fc5780359061122982611175565b9361123686519586611152565b82855283850190846060809502840101928184116102fc578501915b8383106112745750505050508401528181013590830152606090810135910152565b84838303126102fc57875190611289826110a1565b6112928461118d565b825261129f87850161118d565b87830152888401359081151582036102fc578288928b89950152815201920191611252565b81601f820112156102fc578035916020916112de84611175565b936112ec6040519586611152565b808552838086019160051b830101928084116102fc57848301915b8483106113175750505050505090565b823567ffffffffffffffff81116102fc578691611339848480948901016111c6565b815201920191611307565b356001600160a01b03811681036102fc5790565b3580151581036102fc5790565b67ffffffffffffffff81116110bd57601f01601f191660200190565b92919261138d82611365565b9161139b6040519384611152565b8294818452818301116102fc578281602093845f960137010152565b9060808101916001600160a01b03808251168352602093848301519460808186015285518092528060a086019601925f905b83821061140b5750505050506060816040829301516040850152015191015290565b845180518216895280840151821689850152604090810151151590890152606090970196938201936001909101906113e9565b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106114bd5750505050506080846040610f7c959601516060840152606081015115158284015201519060a0601f1982850301910152610ffb565b909192939583806114f8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a516113b7565b98019201920190939291611481565b81601f820112156102fc5780519061151e82611365565b9261152c6040519485611152565b828452602083830101116102fc57815f9260208093018386015e8301015290565b906020828203126102fc57815167ffffffffffffffff81116102fc57610f7c9201611507565b9080601f830112156102fc5781519060209161158e81611175565b9361159c6040519586611152565b81855260208086019260051b8201019283116102fc57602001905b8282106115c5575050505090565b815181529083019083016115b7565b90916060828403126102fc5781519167ffffffffffffffff928381116102fc5784611600918301611573565b936020808301518581116102fc5783019082601f830112156102fc5781519161162883611175565b926116366040519485611152565b808452828085019160051b830101918583116102fc578301905b82821061167257505050509360408301519081116102fc57610f7c9201611573565b81516001600160a01b03811681036102fc578152908301908301611650565b80518210156116a55760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106117515750505050506080846040610f7c959601516060840152606081015115158284015201519060a0601f1982850301910152610ffb565b9091929395838061178c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a516113b7565b98019201920190939291611715565b91906117a6336128b9565b907f000000000000000000000000000000000000000000000000000000000000000093845c6118b1576001906001865d6117df83611175565b926117ed6040519485611152565b808452601f196117fc82611175565b015f5b8181106118a05750505f5b8181106118575750505050905f61184c92945d7f0000000000000000000000000000000000000000000000000000000000000000805c9161184e575b506136b1565b565b5f905d5f611846565b806118845f8061186c610be08996888a61192a565b602081519101305af461187d612877565b903061415c565b61188e8288611691565b526118998187611691565b500161180a565b8060606020809389010152016117ff565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102fc570180359067ffffffffffffffff82116102fc576020019181360383136102fc57565b908210156116a5576119419160051b8101906118d9565b9091565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c6118b1576001905d565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119a457565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b906119da82611175565b6119e76040519182611152565b828152601f196119f78294611175565b0190602036910137565b91908201809211611a0e57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b604081013542116126c35790611a5e611a5760208401846136f4565b90506119d0565b915f5b611a6e60208301836136f4565b90508110156125c757611a9881611a93611a8b60208601866136f4565b369391613748565b6111c6565b936040850151936001600160a01b038651169060208701518051156116a55760200151604001511515806125be575b1561256357611aec611ad886611344565b8784611ae660608a01611358565b92613add565b5f5b60208801515181101561255357611b03613788565b6020890151515f198101908111611a0e578214806020830152821582525f1461254c576060890151905b611b3b8360208c0151611691565b51604081015190919015611cee57611bd36001600160a01b03835116936001600160a01b03881685145f14611ce7576001945b60405195611b7b8761111a565b5f8752611b87816137be565b6020870152604086015260609485918d838301526080820152604051809381927f43583be500000000000000000000000000000000000000000000000000000000835260048301613a22565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94611cb0575b50506020015115611c9657816001600160a01b036020611c909360019695611c388c8c611691565b5201611c67828251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b5051167f000000000000000000000000000000000000000000000000000000000000000061420a565b01611aee565b602001519097506001600160a01b03169250600190611c90565b60209294509081611cd592903d10611ce0575b611ccd8183611152565b8101906137f5565b91505092905f611c10565b503d611cc3565b5f94611b6e565b888a6001600160a01b038495945116806001600160a01b038a16145f14612132575050815115905061206e57888a80151580612053575b611f4d575b6001600160a01b03939291611ddd82611e15978b5f95897f0000000000000000000000000000000000000000000000000000000000000000921680885282602052604088205c611f3c575b5050505b6001611d9c8983511660208401998b8b51169080158a14611f3657508391614223565b999092511694611db1608091828101906118d9565b93909460405197611dc1896110ea565b8852306020890152604088015260608701528501523691611381565b60a0820152604051809681927f21457897000000000000000000000000000000000000000000000000000000008352600483016139b1565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94611f0c575b506020015115611ee95791611ebc826001600160a01b0360019695611e7a611ee49686611691565b51611e858d8d611691565b52611eb3828251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b50511692611691565b51907f000000000000000000000000000000000000000000000000000000000000000061420a565b611c90565b98506001929450611f02906001600160a01b0392611691565b5197511692611c90565b6020919450611f2c903d805f833e611f248183611152565b810190613969565b5094919050611e52565b91614223565b611f4592614341565b5f8281611d75565b50611f5a90929192611344565b91611f648b6142fd565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b156102fc576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039485166004820152306024820152908416604482015292871660648401525f8380608481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f1578a611ddd8d611e15976001600160a01b03975f95612044575b50975092505091929350611d2a565b61204d90611106565b5f612035565b5061205d82611344565b6001600160a01b0316301415611d25565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916001600160a01b0384511692803b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03949094166004850152306024850152604484018c90525f908490606490829084905af180156102f1578a611ddd8d611e15976001600160a01b03975f95612123575b50611d79565b61212c90611106565b5f61211d565b6001600160a01b0360208796949701511690898183145f146123d7576121cd925061220597915060016121735f96956001600160a01b0393848b5116614223565b509282895116956020890151151588146123ae5761219082611344565b945b6121a1608093848101906118d9565b959096604051996121b18b6110ea565b8a52166020890152604088015260608701528501523691611381565b60a0820152604051809581927f4af29ec4000000000000000000000000000000000000000000000000000000008352600483016138f8565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156102f1575f93612384575b5060200151156122c357816001600160a01b036020611ee493600196956122698c8c611691565b526122998383830151167f00000000000000000000000000000000000000000000000000000000000000006141c0565b500151167f000000000000000000000000000000000000000000000000000000000000000061420a565b60208181015191516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101859052939a50909116945081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f157612359575b50600190611c90565b602090813d831161237d575b61236f8183611152565b810103126102fc575f612350565b503d612365565b60209193506123a4903d805f833e61239c8183611152565b81019061387c565b5093919050612242565b837f00000000000000000000000000000000000000000000000000000000000000001694612192565b6001600160a01b036124669561242e9394956123f860809b8c8101906118d9565b9390946040519761240889611136565b5f8952602089015216604087015260609a8b978888015286015260a08501523691611381565b60c0820152604051809381927f2bfb780c00000000000000000000000000000000000000000000000000000000835260048301613810565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94612525575b50506020015115611c9657816001600160a01b036020611ee493600196956124cb8c8c611691565b526124fb8383830151167f00000000000000000000000000000000000000000000000000000000000000006141c0565b500151167f000000000000000000000000000000000000000000000000000000000000000061420a565b6020929450908161254192903d10611ce057611ccd8183611152565b91505092905f6124a3565b5f90611b2d565b5091955090935050600101611a61565b61258d827f00000000000000000000000000000000000000000000000000000000000000006141c0565b506125b986837f000000000000000000000000000000000000000000000000000000000000000061420a565b611aec565b50321515611ac7565b50506125f27f0000000000000000000000000000000000000000000000000000000000000000613a71565b916125fd83516119d0565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b86518110156126ba576001906001600160a01b0380612663838b611691565b51165f528560205261269160405f205c8261267e858d611691565b51165f528860205260405f205c90611a01565b61269b8387611691565b526126a6828a611691565b51165f52856020525f604081205d01612644565b50949391509150565b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f198201918213600116611a0e57565b7f80000000000000000000000000000000000000000000000000000000000000008114611a0e575f190190565b907f000000000000000000000000000000000000000000000000000000000000000090815c7f0000000000000000000000000000000000000000000000000000000000000000612779815c6126eb565b907f0000000000000000000000000000000000000000000000000000000000000000915b5f81121561283a575050506127b1906126eb565b917f0000000000000000000000000000000000000000000000000000000000000000925b5f8112156127ea575050505061184c906136b1565b61283590825f5261282f60205f83828220015c91828252888152886040916128228a8d8587205c906001600160a01b03891690613eb0565b8484525281205d84613e0d565b506126fc565b6127d5565b61287290825f5261282f60205f8a8785848420015c938484528181526128228c6040948587205c906001600160a01b03891690613add565b61279d565b3d156128a1573d9061288882611365565b916128966040519384611152565b82523d5f602084013e565b606090565b359065ffffffffffff821682036102fc57565b905f917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03815c16156128f1575050565b909192505d600190565b90604082013542116126c357612917611a5760208401846136f4565b915f5b61292760208301836136f4565b90508110156135d15761294481611a93611a8b60208601866136f4565b60608101519061297e6001600160a01b038251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b506020810151515f198101908111611a0e575b5f8112156129a45750505060010161291a565b6129b2816020840151611691565b516129bb613788565b9082156020830152602084015151805f19810111611a0e575f1901831480835261358f575b6020820151156135545760408401516001600160a01b03855116915b604081015115612c1d5783916001600160a01b036060926020612aa0970151151580612c14575b612bed575b5116906001600160a01b0385168203612be6576001915b60405192612a4c8461111a565b60018452612a59816137be565b6020840152604083015288838301526080820152604051809581927f43583be500000000000000000000000000000000000000000000000000000000835260048301613a22565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156102f15787918b915f95612bbf575b506020015115612bb057612ba69284612b02612bab979694612b7594611691565b52612b366001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006141c0565b506001600160a01b03612b4d8460408a01516137b1565b91167f000000000000000000000000000000000000000000000000000000000000000061420a565b6001600160a01b038551167f000000000000000000000000000000000000000000000000000000000000000061420a565b6126fc565b612991565b505050612bab919350926126fc565b6020919550612bdc9060603d606011611ce057611ccd8183611152565b5095919050612ae1565b5f91612a3f565b612c0f612bf98d611344565b8d8b611ae6886040888451169301519301611358565b612a28565b50321515612a23565b906001600160a01b03825116806001600160a01b038516145f14613137575060208401516130495750604051927f967870920000000000000000000000000000000000000000000000000000000084526001600160a01b03831660048501526020846024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9384156102f1575f94613015575b5083916001600160a01b038151166001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015230602482015260448101959095525f8580606481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156102f157612dec955f92613006575b505b611ddd6001600160a01b03612da88b828551168360208701511690614223565b50925116918c6002612dbf608092838101906118d9565b92909360405196612dcf886110ea565b875230602088015289604088015260608701528501523691611381565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94612fe3575b506020015115612ecf57908291612bab9493612e45898d611691565b52612e7a836001600160a01b0384167f000000000000000000000000000000000000000000000000000000000000000061420a565b80831080612eb4575b612e90575b5050506126fc565b612ea6612eac93612ea08b611344565b926137b1565b91614356565b5f8080612e88565b50306001600160a01b03612ec78b611344565b161415612e83565b9450908094808210612ee8575b505050612bab906126fc565b91612ef8602092612f77946137b1565b90612f2d826001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683614356565b60405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f157612fb8575b8080612edc565b602090813d8311612fdc575b612fce8183611152565b810103126102fc575f612fb1565b503d612fc4565b6020919450612ffb903d805f833e611f248183611152565b509094919050612e29565b61300f90611106565b5f612d86565b9093506020813d602011613041575b8161303160209383611152565b810103126102fc5751925f612cbc565b3d9150613024565b909261305489611344565b6001600160a01b033091160361306f575b5f612dec94612d88565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016936130a38a611344565b6130ac846142fd565b90863b156102fc576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152306024820152918116604483015285166064820152945f908690608490829084905af19081156102f157612dec955f92613128575b50945050613065565b61313190611106565b5f61311f565b6001600160a01b036020849695940151168a8282145f1461340b5750505061320c61316e5f92846001600160a01b03885116614223565b92906131d48c6001600160a01b03808a5116938951151586146133df576131a361319784611344565b935b60808101906118d9565b929093604051966131b3886110ea565b875216602086015260408501528c6060850152600260808501523691611381565b60a0820152604051809381927f4af29ec4000000000000000000000000000000000000000000000000000000008352600483016138f8565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156102f1575f916133c4575b5060208401518c908a90156133aa5783836001600160a01b03936132836132899461327c8f9c9b9a98996132b29a611691565b5192611691565b52611691565b5191167f000000000000000000000000000000000000000000000000000000000000000061420a565b51156132f457612bab92916001600160a01b036020612ba6930151167f0000000000000000000000000000000000000000000000000000000000000000614341565b516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024810191909152602081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f15761337f575b50612bab906126fc565b602090813d83116133a3575b6133958183611152565b810103126102fc575f613375565b503d61338b565b50509091506133bb92939650611691565b519384916132b2565b6133d891503d805f833e61239c8183611152565b9050613249565b6131a3827f00000000000000000000000000000000000000000000000000000000000000001693613199565b61349e965090613466916060948b61342b608099989993848101906118d9565b9390946040519761343b89611136565b6001895260208901526001600160a01b038b1660408901528888015286015260a08501523691611381565b60c0820152604051809581927f2bfb780c00000000000000000000000000000000000000000000000000000000835260048301613810565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156102f15787918b915f9561352d575b506020015115612bb057612ba69284613505612bab9796946001600160a01b0394611691565b52167f000000000000000000000000000000000000000000000000000000000000000061420a565b602091955061354a9060603d606011611ce057611ccd8183611152565b50959190506134df565b6fffffffffffffffffffffffffffffffff6001600160a01b0360206135858188015161357f886126eb565b90611691565b51015116916129fc565b6135cc856001600160a01b0360208401611c67828251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b6129e0565b50506135fc7f0000000000000000000000000000000000000000000000000000000000000000613a71565b9161360783516119d0565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b86518110156126ba576001906001600160a01b038061366d838b611691565b51165f528560205261368860405f205c8261267e858d611691565b6136928387611691565b5261369d828a611691565b51165f52856020525f604081205d0161364e565b4780156136f0577f00000000000000000000000000000000000000000000000000000000000000005c6136f0576001600160a01b0361184c92166140e0565b5050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102fc570180359067ffffffffffffffff82116102fc57602001918160051b360383136102fc57565b91908110156116a55760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81813603018212156102fc570190565b604051906040820182811067ffffffffffffffff8211176110bd576040525f6020838281520152565b91908203918211611a0e57565b600211156137c857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b908160609103126102fc578051916040602083015192015190565b61010060c0610f7c93602084528051613828816137be565b602085015260208101516001600160a01b0380911660408601528060408301511660608601526060820151166080850152608081015160a085015260a08101518285015201519160e0808201520190610ffb565b90916060828403126102fc5781519167ffffffffffffffff928381116102fc57846138a8918301611573565b9360208201519360408301519081116102fc57610f7c9201611507565b9081518082526020808093019301915f5b8281106138e4575050505090565b8351855293810193928101926001016138d6565b602081526001600160a01b038083511660208301526020830151166040820152613931604083015160c0606084015260e08301906138c5565b9060608301516080820152608083015160058110156137c857610f7c9360a0918284015201519060c0601f1982850301910152610ffb565b916060838303126102fc5782519260208101519267ffffffffffffffff938481116102fc578161399a918401611573565b9360408301519081116102fc57610f7c9201611507565b602081526001600160a01b038083511660208301526020830151166040820152604082015160608201526139f4606083015160c0608084015260e08301906138c5565b90608083015160048110156137c857610f7c9360a0918284015201519060c0601f1982850301910152610ffb565b91909160808060a08301948051613a38816137be565b84526020810151613a48816137be565b60208501526001600160a01b036040820151166040850152606081015160608501520151910152565b90815c613a7d81611175565b613a8a6040519182611152565b818152613a9682611175565b601f196020910136602084013781945f5b848110613ab5575050505050565b600190825f5280845f20015c6001600160a01b03613ad38388611691565b9116905201613aa7565b919280613dd8575b15613c51575050804710613c29576001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691823b156102fc57604051907fd0e30db00000000000000000000000000000000000000000000000000000000082525f915f8160048185895af180156102f157613c12575b506044602092937f00000000000000000000000000000000000000000000000000000000000000001694613b98838783614356565b8460405196879485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af1908115613c065750613bdf5750565b602090813d8311613bff575b613bf58183611152565b810103126102fc57565b503d613beb565b604051903d90823e3d90fd5b60209250613c1f90611106565b60445f9250613b63565b7fa01a9df6000000000000000000000000000000000000000000000000000000005f5260045ffd5b90915f9080613c61575b50505050565b6001600160a01b0393847f00000000000000000000000000000000000000000000000000000000000000001694807f00000000000000000000000000000000000000000000000000000000000000001691613cbb846142fd565b96803b156102fc576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152848316602482015297821660448901529186161660648701525f908690608490829084905af19485156102f157613d8095613dc4575b5082936020936040518097819582947f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03925af1908115613c065750613d99575b808080613c5b565b602090813d8311613dbd575b613daf8183611152565b810103126102fc575f613d91565b503d613da5565b60209350613dd190611106565b5f92613d2f565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614613ae5565b6001810191805f5260209183835260405f205c8015155f14613ea7575f1990818101835c8380820191828403613e6a575b5050505050815c81810192818411611a0e575f93815d835284832001015d5f52525f604081205d600190565b613e77613e87938861443a565b865f52885f2001015c918561443a565b835f52808383885f2001015d5f5285855260405f205d5f80808381613e3e565b50505050505f90565b5f949383156140d857806140a3575b15614007576001600160a01b0391827f000000000000000000000000000000000000000000000000000000000000000016803b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03929092166004830152306024830152604482018590525f908290606490829084905af180156102f157613ff4575b5084827f000000000000000000000000000000000000000000000000000000000000000016803b15613ff05781906024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528960048401525af18015613fe557613fcd575b5061184c939450166140e0565b613fd78691611106565b613fe15784613fc0565b8480fd5b6040513d88823e3d90fd5b5080fd5b613fff919550611106565b5f935f613f53565b929350906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af180156102f15761409a5750565b61184c90611106565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690831614613ebf565b505050509050565b814710614130575f8080936001600160a01b038294165af1614100612877565b501561410857565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b90614171575080511561410857805190602001fd5b815115806141b7575b614182575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561417a565b6001810190825f528160205260405f205c155f1461420357805c815f52838160205f20015d60018101809111611a0e57815d5c915f5260205260405f205d600190565b5050505f90565b905f5260205261421f60405f2091825c611a01565b905d565b916044929391936001600160a01b03604094859282808551998a9586947fc9c1661b0000000000000000000000000000000000000000000000000000000086521660048501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9384156142f3575f935f956142bc575b50506142b96142b285946119d0565b9485611691565b52565b809295508194503d83116142ec575b6142d58183611152565b810103126102fc5760208251920151925f806142a3565b503d6142cb565b83513d5f823e3d90fd5b6001600160a01b0390818111614311571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b905f5260205261421f60405f2091825c6137b1565b6040519260208401907fa9059cbb0000000000000000000000000000000000000000000000000000000082526001600160a01b038094166024860152604485015260448452608084019084821067ffffffffffffffff8311176110bd576143d5935f9384936040521694519082865af16143ce612877565b908361415c565b8051908115159182614416575b50506143eb5750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81925090602091810103126102fc57602001518015908115036102fc575f806143e2565b5c111561444357565b7f0f4ae0e4000000000000000000000000000000000000000000000000000000005f5260045ffdfea2646970667358221220229a5cf89aa7c2d0a4b4d5db20bba6c2b3a74b080303fc6ec00ba582a5dcf75164736f6c634300081a0033",
+ "deployedBytecode": "0x60806040526004361015610072575b3615610018575f80fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361004a57005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c806308a465f614610e9d57806319c6989f1461084e578063286f580d146107b75780632950286e146106cc57806354fd4d501461058f5780635a3c3987146105665780635e01eb5a146105215780638a12a08c146104c65780638eb1b65e146103bf578063945ed33f14610344578063ac9650d8146103005763e3b5dff40361000e57346102fc576060806003193601126102fc5767ffffffffffffffff6004358181116102fc5761012d9036906004016112c4565b6101356111a1565b6044359283116102fc57610150610158933690600401610fcd565b9390916128b9565b905f5b835181101561017c57805f8761017360019488611691565b5101520161015b565b506101f06101fe610239946101b65f94886040519361019a8561111a565b30855260208501525f1960408501528660608501523691611381565b60808201526040519283917f8a12a08c0000000000000000000000000000000000000000000000000000000060208401526024830161143e565b03601f198101835282611152565b604051809481927fedfa3568000000000000000000000000000000000000000000000000000000008352602060048401526024830190610ffb565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19182156102f1576102a39261028e915f916102cf575b50602080825183010191016115d4565b909391926102a7575b60405193849384610f2f565b0390f35b5f7f00000000000000000000000000000000000000000000000000000000000000005d610297565b6102eb91503d805f833e6102e38183611152565b81019061154d565b8461027e565b6040513d5f823e3d90fd5b5f80fd5b60206003193601126102fc5760043567ffffffffffffffff81116102fc576103386103326102a3923690600401610f9c565b9061179b565b60405191829182611020565b346102fc5761035236610eca565b61035a611945565b610362611972565b6103906102a3610371836128fb565b9193909461038a606061038383611344565b9201611358565b90612729565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d60405193849384610f2f565b60806003193601126102fc5767ffffffffffffffff6004358181116102fc576103ec9036906004016112c4565b906103f56111b7565b906064359081116102fc576101f061048b6102399461045161041c5f953690600401610fcd565b610425336128b9565b97604051946104338661111a565b33865260208601526024356040860152151560608501523691611381565b60808201526040519283917f945ed33f000000000000000000000000000000000000000000000000000000006020840152602483016116d2565b604051809481927f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190610ffb565b346102fc576102a36104ef6104da36610eca565b6104e2611945565b6104ea611972565b611a3b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f009492945d60405193849384610f2f565b346102fc575f6003193601126102fc5760207f00000000000000000000000000000000000000000000000000000000000000005c6001600160a01b0360405191168152f35b346102fc576102a36104ef61057a36610eca565b610582611945565b61058a611972565b6128fb565b346102fc575f6003193601126102fc576040515f80549060018260011c91600184169182156106c2575b60209485851084146106955785879486865291825f146106575750506001146105fe575b506105ea92500383611152565b6102a3604051928284938452830190610ffb565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b85831061063f5750506105ea9350820101856105dd565b80548389018501528794508693909201918101610628565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858201526105ea95151560051b85010192508791506105dd9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926105b9565b346102fc5760606003193601126102fc5767ffffffffffffffff6004358181116102fc576106fe9036906004016112c4565b906107076111a1565b6044359182116102fc5761072261072a923690600401610fcd565b9290916128b9565b905f5b845181101561075f57806fffffffffffffffffffffffffffffffff604061075660019489611691565b5101520161072d565b506101f06101fe8561077d5f94610239976040519361019a8561111a565b60808201526040519283917f5a3c3987000000000000000000000000000000000000000000000000000000006020840152602483016116d2565b60806003193601126102fc5767ffffffffffffffff6004358181116102fc576107e49036906004016112c4565b906107ed6111b7565b906064359081116102fc576101f061048b6102399461081461041c5f953690600401610fcd565b60808201526040519283917f08a465f60000000000000000000000000000000000000000000000000000000060208401526024830161143e565b60a06003193601126102fc5767ffffffffffffffff600435116102fc573660236004350112156102fc5767ffffffffffffffff60043560040135116102fc5736602460c060043560040135026004350101116102fc5760243567ffffffffffffffff81116102fc576108c4903690600401610f9c565b67ffffffffffffffff604435116102fc576060600319604435360301126102fc5760643567ffffffffffffffff81116102fc57610905903690600401610fcd565b60843567ffffffffffffffff81116102fc57610925903690600401610f9c565b949093610930611945565b806004356004013503610e75575f5b600435600401358110610bd25750505060443560040135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd6044353603018212156102fc57816044350160048101359067ffffffffffffffff82116102fc5760248260071b36039101136102fc576109e3575b6102a361033886865f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d61179b565b6001600160a01b039492947f0000000000000000000000000000000000000000000000000000000000000000163b156102fc57604051947f2a2d80d10000000000000000000000000000000000000000000000000000000086523360048701526060602487015260c486019260443501602481019367ffffffffffffffff6004830135116102fc57600482013560071b360385136102fc5760606064890152600482013590529192869260e484019291905f905b60048101358210610b5457505050602091601f19601f865f9787956001600160a01b03610ac860246044350161118d565b16608488015260448035013560a48801526003198787030160448801528186528786013787868286010152011601030181836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19182156102f1576102a39361033893610b45575b8294508193506109b3565b610b4e90611106565b84610b3a565b9195945091926001600160a01b03610b6b8761118d565b168152602080870135916001600160a01b0383168093036102fc57600492600192820152610b9b604089016128a6565b65ffffffffffff8091166040830152610bb660608a016128a6565b1660608201526080809101970193019050889495939291610a97565b610be7610be082848661192a565b3691611381565b604051610bf3816110a1565b5f81526020915f838301525f60408301528281015190606060408201519101515f1a91835283830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc81850260043501360301126102fc5760405190610c60826110ea565b610c73602460c08602600435010161118d565b808352610c89604460c08702600435010161118d565b908185850152610ca2606460c08802600435010161118d565b60408581019190915260043560c08802016084810135606087015260a4810135608087015260c4013560a086015283015183519386015160ff91909116926001600160a01b0383163b156102fc575f6001600160a01b03809460e4948b98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081610e66575b50610e5c57610d7f612877565b906001600160a01b0381511690836001600160a01b0381830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa9182156102f1575f92610e2c575b506060015103610df75750506001905b0161093f565b805115610e045780519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091508381813d8311610e55575b610e448183611152565b810103126102fc5751906060610de1565b503d610e3a565b5050600190610df1565b610e6f90611106565b8a610d72565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fc57610eab36610eca565b610eb3611945565b610ebb611972565b6103906102a361037183611a3b565b600319906020828201126102fc576004359167ffffffffffffffff83116102fc578260a0920301126102fc5760040190565b9081518082526020808093019301915f5b828110610f1b575050505090565b835185529381019392810192600101610f0d565b939290610f4490606086526060860190610efc565b936020948181036020830152602080855192838152019401905f5b818110610f7f57505050610f7c9394506040818403910152610efc565b90565b82516001600160a01b031686529487019491870191600101610f5f565b9181601f840112156102fc5782359167ffffffffffffffff83116102fc576020808501948460051b0101116102fc57565b9181601f840112156102fc5782359167ffffffffffffffff83116102fc57602083818601950101116102fc57565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106110555750505050505090565b9091929394958480611091837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51610ffb565b9801930193019194939290611045565b6060810190811067ffffffffffffffff8211176110bd57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60c0810190811067ffffffffffffffff8211176110bd57604052565b67ffffffffffffffff81116110bd57604052565b60a0810190811067ffffffffffffffff8211176110bd57604052565b60e0810190811067ffffffffffffffff8211176110bd57604052565b90601f601f19910116810190811067ffffffffffffffff8211176110bd57604052565b67ffffffffffffffff81116110bd5760051b60200190565b35906001600160a01b03821682036102fc57565b602435906001600160a01b03821682036102fc57565b6044359081151582036102fc57565b9190916080818403126102fc57604090815191608083019467ffffffffffffffff95848110878211176110bd57825283956112008461118d565b8552602090818501359081116102fc57840182601f820112156102fc5780359061122982611175565b9361123686519586611152565b82855283850190846060809502840101928184116102fc578501915b8383106112745750505050508401528181013590830152606090810135910152565b84838303126102fc57875190611289826110a1565b6112928461118d565b825261129f87850161118d565b87830152888401359081151582036102fc578288928b89950152815201920191611252565b81601f820112156102fc578035916020916112de84611175565b936112ec6040519586611152565b808552838086019160051b830101928084116102fc57848301915b8483106113175750505050505090565b823567ffffffffffffffff81116102fc578691611339848480948901016111c6565b815201920191611307565b356001600160a01b03811681036102fc5790565b3580151581036102fc5790565b67ffffffffffffffff81116110bd57601f01601f191660200190565b92919261138d82611365565b9161139b6040519384611152565b8294818452818301116102fc578281602093845f960137010152565b9060808101916001600160a01b03808251168352602093848301519460808186015285518092528060a086019601925f905b83821061140b5750505050506060816040829301516040850152015191015290565b845180518216895280840151821689850152604090810151151590890152606090970196938201936001909101906113e9565b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106114bd5750505050506080846040610f7c959601516060840152606081015115158284015201519060a0601f1982850301910152610ffb565b909192939583806114f8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a516113b7565b98019201920190939291611481565b81601f820112156102fc5780519061151e82611365565b9261152c6040519485611152565b828452602083830101116102fc57815f9260208093018386015e8301015290565b906020828203126102fc57815167ffffffffffffffff81116102fc57610f7c9201611507565b9080601f830112156102fc5781519060209161158e81611175565b9361159c6040519586611152565b81855260208086019260051b8201019283116102fc57602001905b8282106115c5575050505090565b815181529083019083016115b7565b90916060828403126102fc5781519167ffffffffffffffff928381116102fc5784611600918301611573565b936020808301518581116102fc5783019082601f830112156102fc5781519161162883611175565b926116366040519485611152565b808452828085019160051b830101918583116102fc578301905b82821061167257505050509360408301519081116102fc57610f7c9201611573565b81516001600160a01b03811681036102fc578152908301908301611650565b80518210156116a55760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106117515750505050506080846040610f7c959601516060840152606081015115158284015201519060a0601f1982850301910152610ffb565b9091929395838061178c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a516113b7565b98019201920190939291611715565b91906117a6336128b9565b907f000000000000000000000000000000000000000000000000000000000000000093845c6118b1576001906001865d6117df83611175565b926117ed6040519485611152565b808452601f196117fc82611175565b015f5b8181106118a05750505f5b8181106118575750505050905f61184c92945d7f0000000000000000000000000000000000000000000000000000000000000000805c9161184e575b506136b1565b565b5f905d5f611846565b806118845f8061186c610be08996888a61192a565b602081519101305af461187d612877565b903061415c565b61188e8288611691565b526118998187611691565b500161180a565b8060606020809389010152016117ff565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102fc570180359067ffffffffffffffff82116102fc576020019181360383136102fc57565b908210156116a5576119419160051b8101906118d9565b9091565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c6118b1576001905d565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119a457565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b906119da82611175565b6119e76040519182611152565b828152601f196119f78294611175565b0190602036910137565b91908201809211611a0e57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b604081013542116126c35790611a5e611a5760208401846136f4565b90506119d0565b915f5b611a6e60208301836136f4565b90508110156125c757611a9881611a93611a8b60208601866136f4565b369391613748565b6111c6565b936040850151936001600160a01b038651169060208701518051156116a55760200151604001511515806125be575b1561256357611aec611ad886611344565b8784611ae660608a01611358565b92613add565b5f5b60208801515181101561255357611b03613788565b6020890151515f198101908111611a0e578214806020830152821582525f1461254c576060890151905b611b3b8360208c0151611691565b51604081015190919015611cee57611bd36001600160a01b03835116936001600160a01b03881685145f14611ce7576001945b60405195611b7b8761111a565b5f8752611b87816137be565b6020870152604086015260609485918d838301526080820152604051809381927f43583be500000000000000000000000000000000000000000000000000000000835260048301613a22565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94611cb0575b50506020015115611c9657816001600160a01b036020611c909360019695611c388c8c611691565b5201611c67828251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b5051167f000000000000000000000000000000000000000000000000000000000000000061420a565b01611aee565b602001519097506001600160a01b03169250600190611c90565b60209294509081611cd592903d10611ce0575b611ccd8183611152565b8101906137f5565b91505092905f611c10565b503d611cc3565b5f94611b6e565b888a6001600160a01b038495945116806001600160a01b038a16145f14612132575050815115905061206e57888a80151580612053575b611f4d575b6001600160a01b03939291611ddd82611e15978b5f95897f0000000000000000000000000000000000000000000000000000000000000000921680885282602052604088205c611f3c575b5050505b6001611d9c8983511660208401998b8b51169080158a14611f3657508391614223565b999092511694611db1608091828101906118d9565b93909460405197611dc1896110ea565b8852306020890152604088015260608701528501523691611381565b60a0820152604051809681927f21457897000000000000000000000000000000000000000000000000000000008352600483016139b1565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94611f0c575b506020015115611ee95791611ebc826001600160a01b0360019695611e7a611ee49686611691565b51611e858d8d611691565b52611eb3828251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b50511692611691565b51907f000000000000000000000000000000000000000000000000000000000000000061420a565b611c90565b98506001929450611f02906001600160a01b0392611691565b5197511692611c90565b6020919450611f2c903d805f833e611f248183611152565b810190613969565b5094919050611e52565b91614223565b611f4592614341565b5f8281611d75565b50611f5a90929192611344565b91611f648b6142fd565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b156102fc576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039485166004820152306024820152908416604482015292871660648401525f8380608481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f1578a611ddd8d611e15976001600160a01b03975f95612044575b50975092505091929350611d2a565b61204d90611106565b5f612035565b5061205d82611344565b6001600160a01b0316301415611d25565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916001600160a01b0384511692803b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03949094166004850152306024850152604484018c90525f908490606490829084905af180156102f1578a611ddd8d611e15976001600160a01b03975f95612123575b50611d79565b61212c90611106565b5f61211d565b6001600160a01b0360208796949701511690898183145f146123d7576121cd925061220597915060016121735f96956001600160a01b0393848b5116614223565b509282895116956020890151151588146123ae5761219082611344565b945b6121a1608093848101906118d9565b959096604051996121b18b6110ea565b8a52166020890152604088015260608701528501523691611381565b60a0820152604051809581927f4af29ec4000000000000000000000000000000000000000000000000000000008352600483016138f8565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156102f1575f93612384575b5060200151156122c357816001600160a01b036020611ee493600196956122698c8c611691565b526122998383830151167f00000000000000000000000000000000000000000000000000000000000000006141c0565b500151167f000000000000000000000000000000000000000000000000000000000000000061420a565b60208181015191516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101859052939a50909116945081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f157612359575b50600190611c90565b602090813d831161237d575b61236f8183611152565b810103126102fc575f612350565b503d612365565b60209193506123a4903d805f833e61239c8183611152565b81019061387c565b5093919050612242565b837f00000000000000000000000000000000000000000000000000000000000000001694612192565b6001600160a01b036124669561242e9394956123f860809b8c8101906118d9565b9390946040519761240889611136565b5f8952602089015216604087015260609a8b978888015286015260a08501523691611381565b60c0820152604051809381927f2bfb780c00000000000000000000000000000000000000000000000000000000835260048301613810565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94612525575b50506020015115611c9657816001600160a01b036020611ee493600196956124cb8c8c611691565b526124fb8383830151167f00000000000000000000000000000000000000000000000000000000000000006141c0565b500151167f000000000000000000000000000000000000000000000000000000000000000061420a565b6020929450908161254192903d10611ce057611ccd8183611152565b91505092905f6124a3565b5f90611b2d565b5091955090935050600101611a61565b61258d827f00000000000000000000000000000000000000000000000000000000000000006141c0565b506125b986837f000000000000000000000000000000000000000000000000000000000000000061420a565b611aec565b50321515611ac7565b50506125f27f0000000000000000000000000000000000000000000000000000000000000000613a71565b916125fd83516119d0565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b86518110156126ba576001906001600160a01b0380612663838b611691565b51165f528560205261269160405f205c8261267e858d611691565b51165f528860205260405f205c90611a01565b61269b8387611691565b526126a6828a611691565b51165f52856020525f604081205d01612644565b50949391509150565b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f198201918213600116611a0e57565b7f80000000000000000000000000000000000000000000000000000000000000008114611a0e575f190190565b907f000000000000000000000000000000000000000000000000000000000000000090815c7f0000000000000000000000000000000000000000000000000000000000000000612779815c6126eb565b907f0000000000000000000000000000000000000000000000000000000000000000915b5f81121561283a575050506127b1906126eb565b917f0000000000000000000000000000000000000000000000000000000000000000925b5f8112156127ea575050505061184c906136b1565b61283590825f5261282f60205f83828220015c91828252888152886040916128228a8d8587205c906001600160a01b03891690613eb0565b8484525281205d84613e0d565b506126fc565b6127d5565b61287290825f5261282f60205f8a8785848420015c938484528181526128228c6040948587205c906001600160a01b03891690613add565b61279d565b3d156128a1573d9061288882611365565b916128966040519384611152565b82523d5f602084013e565b606090565b359065ffffffffffff821682036102fc57565b905f917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03815c16156128f1575050565b909192505d600190565b90604082013542116126c357612917611a5760208401846136f4565b915f5b61292760208301836136f4565b90508110156135d15761294481611a93611a8b60208601866136f4565b60608101519061297e6001600160a01b038251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b506020810151515f198101908111611a0e575b5f8112156129a45750505060010161291a565b6129b2816020840151611691565b516129bb613788565b9082156020830152602084015151805f19810111611a0e575f1901831480835261358f575b6020820151156135545760408401516001600160a01b03855116915b604081015115612c1d5783916001600160a01b036060926020612aa0970151151580612c14575b612bed575b5116906001600160a01b0385168203612be6576001915b60405192612a4c8461111a565b60018452612a59816137be565b6020840152604083015288838301526080820152604051809581927f43583be500000000000000000000000000000000000000000000000000000000835260048301613a22565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156102f15787918b915f95612bbf575b506020015115612bb057612ba69284612b02612bab979694612b7594611691565b52612b366001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006141c0565b506001600160a01b03612b4d8460408a01516137b1565b91167f000000000000000000000000000000000000000000000000000000000000000061420a565b6001600160a01b038551167f000000000000000000000000000000000000000000000000000000000000000061420a565b6126fc565b612991565b505050612bab919350926126fc565b6020919550612bdc9060603d606011611ce057611ccd8183611152565b5095919050612ae1565b5f91612a3f565b612c0f612bf98d611344565b8d8b611ae6886040888451169301519301611358565b612a28565b50321515612a23565b906001600160a01b03825116806001600160a01b038516145f14613137575060208401516130495750604051927f967870920000000000000000000000000000000000000000000000000000000084526001600160a01b03831660048501526020846024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9384156102f1575f94613015575b5083916001600160a01b038151166001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015230602482015260448101959095525f8580606481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156102f157612dec955f92613006575b505b611ddd6001600160a01b03612da88b828551168360208701511690614223565b50925116918c6002612dbf608092838101906118d9565b92909360405196612dcf886110ea565b875230602088015289604088015260608701528501523691611381565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94612fe3575b506020015115612ecf57908291612bab9493612e45898d611691565b52612e7a836001600160a01b0384167f000000000000000000000000000000000000000000000000000000000000000061420a565b80831080612eb4575b612e90575b5050506126fc565b612ea6612eac93612ea08b611344565b926137b1565b91614356565b5f8080612e88565b50306001600160a01b03612ec78b611344565b161415612e83565b9450908094808210612ee8575b505050612bab906126fc565b91612ef8602092612f77946137b1565b90612f2d826001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683614356565b60405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f157612fb8575b8080612edc565b602090813d8311612fdc575b612fce8183611152565b810103126102fc575f612fb1565b503d612fc4565b6020919450612ffb903d805f833e611f248183611152565b509094919050612e29565b61300f90611106565b5f612d86565b9093506020813d602011613041575b8161303160209383611152565b810103126102fc5751925f612cbc565b3d9150613024565b909261305489611344565b6001600160a01b033091160361306f575b5f612dec94612d88565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016936130a38a611344565b6130ac846142fd565b90863b156102fc576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152306024820152918116604483015285166064820152945f908690608490829084905af19081156102f157612dec955f92613128575b50945050613065565b61313190611106565b5f61311f565b6001600160a01b036020849695940151168a8282145f1461340b5750505061320c61316e5f92846001600160a01b03885116614223565b92906131d48c6001600160a01b03808a5116938951151586146133df576131a361319784611344565b935b60808101906118d9565b929093604051966131b3886110ea565b875216602086015260408501528c6060850152600260808501523691611381565b60a0820152604051809381927f4af29ec4000000000000000000000000000000000000000000000000000000008352600483016138f8565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156102f1575f916133c4575b5060208401518c908a90156133aa5783836001600160a01b03936132836132899461327c8f9c9b9a98996132b29a611691565b5192611691565b52611691565b5191167f000000000000000000000000000000000000000000000000000000000000000061420a565b51156132f457612bab92916001600160a01b036020612ba6930151167f0000000000000000000000000000000000000000000000000000000000000000614341565b516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024810191909152602081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f15761337f575b50612bab906126fc565b602090813d83116133a3575b6133958183611152565b810103126102fc575f613375565b503d61338b565b50509091506133bb92939650611691565b519384916132b2565b6133d891503d805f833e61239c8183611152565b9050613249565b6131a3827f00000000000000000000000000000000000000000000000000000000000000001693613199565b61349e965090613466916060948b61342b608099989993848101906118d9565b9390946040519761343b89611136565b6001895260208901526001600160a01b038b1660408901528888015286015260a08501523691611381565b60c0820152604051809581927f2bfb780c00000000000000000000000000000000000000000000000000000000835260048301613810565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156102f15787918b915f9561352d575b506020015115612bb057612ba69284613505612bab9796946001600160a01b0394611691565b52167f000000000000000000000000000000000000000000000000000000000000000061420a565b602091955061354a9060603d606011611ce057611ccd8183611152565b50959190506134df565b6fffffffffffffffffffffffffffffffff6001600160a01b0360206135858188015161357f886126eb565b90611691565b51015116916129fc565b6135cc856001600160a01b0360208401611c67828251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b6129e0565b50506135fc7f0000000000000000000000000000000000000000000000000000000000000000613a71565b9161360783516119d0565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b86518110156126ba576001906001600160a01b038061366d838b611691565b51165f528560205261368860405f205c8261267e858d611691565b6136928387611691565b5261369d828a611691565b51165f52856020525f604081205d0161364e565b4780156136f0577f00000000000000000000000000000000000000000000000000000000000000005c6136f0576001600160a01b0361184c92166140e0565b5050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102fc570180359067ffffffffffffffff82116102fc57602001918160051b360383136102fc57565b91908110156116a55760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81813603018212156102fc570190565b604051906040820182811067ffffffffffffffff8211176110bd576040525f6020838281520152565b91908203918211611a0e57565b600211156137c857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b908160609103126102fc578051916040602083015192015190565b61010060c0610f7c93602084528051613828816137be565b602085015260208101516001600160a01b0380911660408601528060408301511660608601526060820151166080850152608081015160a085015260a08101518285015201519160e0808201520190610ffb565b90916060828403126102fc5781519167ffffffffffffffff928381116102fc57846138a8918301611573565b9360208201519360408301519081116102fc57610f7c9201611507565b9081518082526020808093019301915f5b8281106138e4575050505090565b8351855293810193928101926001016138d6565b602081526001600160a01b038083511660208301526020830151166040820152613931604083015160c0606084015260e08301906138c5565b9060608301516080820152608083015160058110156137c857610f7c9360a0918284015201519060c0601f1982850301910152610ffb565b916060838303126102fc5782519260208101519267ffffffffffffffff938481116102fc578161399a918401611573565b9360408301519081116102fc57610f7c9201611507565b602081526001600160a01b038083511660208301526020830151166040820152604082015160608201526139f4606083015160c0608084015260e08301906138c5565b90608083015160048110156137c857610f7c9360a0918284015201519060c0601f1982850301910152610ffb565b91909160808060a08301948051613a38816137be565b84526020810151613a48816137be565b60208501526001600160a01b036040820151166040850152606081015160608501520151910152565b90815c613a7d81611175565b613a8a6040519182611152565b818152613a9682611175565b601f196020910136602084013781945f5b848110613ab5575050505050565b600190825f5280845f20015c6001600160a01b03613ad38388611691565b9116905201613aa7565b919280613dd8575b15613c51575050804710613c29576001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691823b156102fc57604051907fd0e30db00000000000000000000000000000000000000000000000000000000082525f915f8160048185895af180156102f157613c12575b506044602092937f00000000000000000000000000000000000000000000000000000000000000001694613b98838783614356565b8460405196879485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af1908115613c065750613bdf5750565b602090813d8311613bff575b613bf58183611152565b810103126102fc57565b503d613beb565b604051903d90823e3d90fd5b60209250613c1f90611106565b60445f9250613b63565b7fa01a9df6000000000000000000000000000000000000000000000000000000005f5260045ffd5b90915f9080613c61575b50505050565b6001600160a01b0393847f00000000000000000000000000000000000000000000000000000000000000001694807f00000000000000000000000000000000000000000000000000000000000000001691613cbb846142fd565b96803b156102fc576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152848316602482015297821660448901529186161660648701525f908690608490829084905af19485156102f157613d8095613dc4575b5082936020936040518097819582947f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03925af1908115613c065750613d99575b808080613c5b565b602090813d8311613dbd575b613daf8183611152565b810103126102fc575f613d91565b503d613da5565b60209350613dd190611106565b5f92613d2f565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614613ae5565b6001810191805f5260209183835260405f205c8015155f14613ea7575f1990818101835c8380820191828403613e6a575b5050505050815c81810192818411611a0e575f93815d835284832001015d5f52525f604081205d600190565b613e77613e87938861443a565b865f52885f2001015c918561443a565b835f52808383885f2001015d5f5285855260405f205d5f80808381613e3e565b50505050505f90565b5f949383156140d857806140a3575b15614007576001600160a01b0391827f000000000000000000000000000000000000000000000000000000000000000016803b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03929092166004830152306024830152604482018590525f908290606490829084905af180156102f157613ff4575b5084827f000000000000000000000000000000000000000000000000000000000000000016803b15613ff05781906024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528960048401525af18015613fe557613fcd575b5061184c939450166140e0565b613fd78691611106565b613fe15784613fc0565b8480fd5b6040513d88823e3d90fd5b5080fd5b613fff919550611106565b5f935f613f53565b929350906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af180156102f15761409a5750565b61184c90611106565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690831614613ebf565b505050509050565b814710614130575f8080936001600160a01b038294165af1614100612877565b501561410857565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b90614171575080511561410857805190602001fd5b815115806141b7575b614182575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561417a565b6001810190825f528160205260405f205c155f1461420357805c815f52838160205f20015d60018101809111611a0e57815d5c915f5260205260405f205d600190565b5050505f90565b905f5260205261421f60405f2091825c611a01565b905d565b916044929391936001600160a01b03604094859282808551998a9586947fc9c1661b0000000000000000000000000000000000000000000000000000000086521660048501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9384156142f3575f935f956142bc575b50506142b96142b285946119d0565b9485611691565b52565b809295508194503d83116142ec575b6142d58183611152565b810103126102fc5760208251920151925f806142a3565b503d6142cb565b83513d5f823e3d90fd5b6001600160a01b0390818111614311571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b905f5260205261421f60405f2091825c6137b1565b6040519260208401907fa9059cbb0000000000000000000000000000000000000000000000000000000082526001600160a01b038094166024860152604485015260448452608084019084821067ffffffffffffffff8311176110bd576143d5935f9384936040521694519082865af16143ce612877565b908361415c565b8051908115159182614416575b50506143eb5750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81925090602091810103126102fc57602001518015908115036102fc575f806143e2565b5c111561444357565b7f0f4ae0e4000000000000000000000000000000000000000000000000000000005f5260045ffdfea2646970667358221220229a5cf89aa7c2d0a4b4d5db20bba6c2b3a74b080303fc6ec00ba582a5dcf75164736f6c634300081a0033",
+ "linkReferences": {},
+ "deployedLinkReferences": {},
+ "_disabled": [
+ {
+ "inputs": [],
+ "name": "getSender",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes[]",
+ "name": "data",
+ "type": "bytes[]"
+ }
+ ],
+ "name": "multicall",
+ "outputs": [
+ {
+ "internalType": "bytes[]",
+ "name": "results",
+ "type": "bytes[]"
+ }
+ ],
+ "stateMutability": "payable",
"type": "function"
},
{
@@ -449,77 +511,109 @@
{
"components": [
{
- "internalType": "contract IERC20",
- "name": "tokenIn",
+ "internalType": "address",
+ "name": "token",
"type": "address"
},
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct IRouterCommon.PermitApproval[]",
+ "name": "permitBatch",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "permitSignatures",
+ "type": "bytes[]"
+ },
+ {
+ "components": [
{
"components": [
{
"internalType": "address",
- "name": "pool",
+ "name": "token",
"type": "address"
},
{
- "internalType": "contract IERC20",
- "name": "tokenOut",
- "type": "address"
+ "internalType": "uint160",
+ "name": "amount",
+ "type": "uint160"
},
{
- "internalType": "bool",
- "name": "isBuffer",
- "type": "bool"
+ "internalType": "uint48",
+ "name": "expiration",
+ "type": "uint48"
+ },
+ {
+ "internalType": "uint48",
+ "name": "nonce",
+ "type": "uint48"
}
],
- "internalType": "struct IBatchRouter.SwapPathStep[]",
- "name": "steps",
+ "internalType": "struct IAllowanceTransfer.PermitDetails[]",
+ "name": "details",
"type": "tuple[]"
},
{
- "internalType": "uint256",
- "name": "maxAmountIn",
- "type": "uint256"
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
},
{
"internalType": "uint256",
- "name": "exactAmountOut",
+ "name": "sigDeadline",
"type": "uint256"
}
],
- "internalType": "struct IBatchRouter.SwapPathExactAmountOut[]",
- "name": "paths",
- "type": "tuple[]"
- },
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
+ "internalType": "struct IAllowanceTransfer.PermitBatch",
+ "name": "permit2Batch",
+ "type": "tuple"
},
{
"internalType": "bytes",
- "name": "userData",
+ "name": "permit2Signature",
"type": "bytes"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "multicallData",
+ "type": "bytes[]"
}
],
- "name": "querySwapExactOut",
+ "name": "permitBatchAndCall",
"outputs": [
{
- "internalType": "uint256[]",
- "name": "pathAmountsIn",
- "type": "uint256[]"
- },
- {
- "internalType": "address[]",
- "name": "tokensIn",
- "type": "address[]"
- },
- {
- "internalType": "uint256[]",
- "name": "amountsIn",
- "type": "uint256[]"
+ "internalType": "bytes[]",
+ "name": "results",
+ "type": "bytes[]"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "payable",
"type": "function"
},
{
@@ -562,16 +656,16 @@
},
{
"internalType": "uint256",
- "name": "maxAmountIn",
+ "name": "exactAmountIn",
"type": "uint256"
},
{
"internalType": "uint256",
- "name": "exactAmountOut",
+ "name": "minAmountOut",
"type": "uint256"
}
],
- "internalType": "struct IBatchRouter.SwapPathExactAmountOut[]",
+ "internalType": "struct IBatchRouter.SwapPathExactAmountIn[]",
"name": "paths",
"type": "tuple[]"
},
@@ -591,26 +685,26 @@
"type": "bytes"
}
],
- "internalType": "struct IBatchRouter.SwapExactOutHookParams",
+ "internalType": "struct IBatchRouter.SwapExactInHookParams",
"name": "params",
"type": "tuple"
}
],
- "name": "querySwapExactOutHook",
+ "name": "querySwapExactInHook",
"outputs": [
{
"internalType": "uint256[]",
- "name": "pathAmountsIn",
+ "name": "pathAmountsOut",
"type": "uint256[]"
},
{
"internalType": "address[]",
- "name": "tokensIn",
+ "name": "tokensOut",
"type": "address[]"
},
{
"internalType": "uint256[]",
- "name": "amountsIn",
+ "name": "amountsOut",
"type": "uint256[]"
}
],
@@ -622,82 +716,94 @@
{
"components": [
{
- "internalType": "contract IERC20",
- "name": "tokenIn",
+ "internalType": "address",
+ "name": "sender",
"type": "address"
},
{
"components": [
{
- "internalType": "address",
- "name": "pool",
+ "internalType": "contract IERC20",
+ "name": "tokenIn",
"type": "address"
},
{
- "internalType": "contract IERC20",
- "name": "tokenOut",
- "type": "address"
+ "components": [
+ {
+ "internalType": "address",
+ "name": "pool",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20",
+ "name": "tokenOut",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "isBuffer",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct IBatchRouter.SwapPathStep[]",
+ "name": "steps",
+ "type": "tuple[]"
},
{
- "internalType": "bool",
- "name": "isBuffer",
- "type": "bool"
+ "internalType": "uint256",
+ "name": "maxAmountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "exactAmountOut",
+ "type": "uint256"
}
],
- "internalType": "struct IBatchRouter.SwapPathStep[]",
- "name": "steps",
+ "internalType": "struct IBatchRouter.SwapPathExactAmountOut[]",
+ "name": "paths",
"type": "tuple[]"
},
{
"internalType": "uint256",
- "name": "exactAmountIn",
+ "name": "deadline",
"type": "uint256"
},
{
- "internalType": "uint256",
- "name": "minAmountOut",
- "type": "uint256"
+ "internalType": "bool",
+ "name": "wethIsEth",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes",
+ "name": "userData",
+ "type": "bytes"
}
],
- "internalType": "struct IBatchRouter.SwapPathExactAmountIn[]",
- "name": "paths",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "deadline",
- "type": "uint256"
- },
- {
- "internalType": "bool",
- "name": "wethIsEth",
- "type": "bool"
- },
- {
- "internalType": "bytes",
- "name": "userData",
- "type": "bytes"
+ "internalType": "struct IBatchRouter.SwapExactOutHookParams",
+ "name": "params",
+ "type": "tuple"
}
],
- "name": "swapExactIn",
+ "name": "querySwapExactOutHook",
"outputs": [
{
"internalType": "uint256[]",
- "name": "pathAmountsOut",
+ "name": "pathAmountsIn",
"type": "uint256[]"
},
{
"internalType": "address[]",
- "name": "tokensOut",
+ "name": "tokensIn",
"type": "address[]"
},
{
"internalType": "uint256[]",
- "name": "amountsOut",
+ "name": "amountsIn",
"type": "uint256[]"
}
],
- "stateMutability": "payable",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -795,89 +901,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "contract IERC20",
- "name": "tokenIn",
- "type": "address"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "pool",
- "type": "address"
- },
- {
- "internalType": "contract IERC20",
- "name": "tokenOut",
- "type": "address"
- },
- {
- "internalType": "bool",
- "name": "isBuffer",
- "type": "bool"
- }
- ],
- "internalType": "struct IBatchRouter.SwapPathStep[]",
- "name": "steps",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "maxAmountIn",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "exactAmountOut",
- "type": "uint256"
- }
- ],
- "internalType": "struct IBatchRouter.SwapPathExactAmountOut[]",
- "name": "paths",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "deadline",
- "type": "uint256"
- },
- {
- "internalType": "bool",
- "name": "wethIsEth",
- "type": "bool"
- },
- {
- "internalType": "bytes",
- "name": "userData",
- "type": "bytes"
- }
- ],
- "name": "swapExactOut",
- "outputs": [
- {
- "internalType": "uint256[]",
- "name": "pathAmountsIn",
- "type": "uint256[]"
- },
- {
- "internalType": "address[]",
- "name": "tokensIn",
- "type": "address[]"
- },
- {
- "internalType": "uint256[]",
- "name": "amountsIn",
- "type": "uint256[]"
- }
- ],
- "stateMutability": "payable",
- "type": "function"
- },
{
"inputs": [
{
@@ -972,27 +995,6 @@
],
"stateMutability": "nonpayable",
"type": "function"
- },
- {
- "inputs": [],
- "name": "version",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "stateMutability": "payable",
- "type": "receive"
}
- ],
- "bytecode": "0x6101c0604090808252346105c957614bbd803803809161001f82856105e8565b83398101916080828403126105c95781516001600160a01b03939084811681036105c957602093848101519286841684036105c9578482015196871687036105c95760608201516001600160401b03928382116105c9570192601f908282860112156105c95784518481116105b557601f19958851946100a58b898786011601876105e8565b8286528a83830101116105c957815f928b8093018388015e8501015260805281519283116105b5575f54916001928381811c911680156105ab575b8982101461059757828111610554575b50879184116001146104f757839450908392915f946104ec575b50501b915f199060031b1c1916175f555b61014961012661060b565b835190610132826105cd565b600682526539b2b73232b960d11b86830152610669565b60a05261018561015761060b565b835190610163826105cd565b60118252701a5cd4995d1d5c9b915d1a131bd8dad959607a1b86830152610669565b60c05260e0526101009283526101cd815161019f816105cd565b601381527f63757272656e7453776170546f6b656e73496e0000000000000000000000000084820152610633565b9161012092835261021082516101e2816105cd565b601481527f63757272656e7453776170546f6b656e734f757400000000000000000000000083820152610633565b6101409081526102528351610224816105cd565b601981527f63757272656e7453776170546f6b656e496e416d6f756e74730000000000000084820152610633565b906101609182526102d8610298855161026a816105cd565b601a81527f63757272656e7453776170546f6b656e4f7574416d6f756e747300000000000086820152610633565b936101809485527f736574746c6564546f6b656e416d6f756e7473000000000000000000000000008651916102cc836105cd565b60138352820152610633565b936101a094855251946144a1968761071c88396080518781816102460152818161197c01528181611be001528181611e22015281816120790152818161221201528181612323015281816123b10152818161247301528181612aad01528181612c8c01528181612cd401528181612d5201528181612df901528181612f0701528181612f840152818161321901528181613348015281816133e5015281816134ab01528181613b6c01528181613c9101528181613ed0015281816140150152614271015260a0518781816102aa015281816105350152818161181f01526128be015260c0518781816117a901526136ba015260e051878181602201528181613afe01528181613de401528181613f5801526140af0152518681816109f001528181610b0401528181611f6e01528181611ff4015281816130790152613c6d015251858181612569015281816127500152818161295a01526135d8015251848181611c4301528181611e8f01528181612275015281816124d7015281816125ce0152818161272c01528181612b1201526135a8015251838181611d43015281816125950152818161277c0152818161328e01528181613509015261362b015251828181611c6c01528181611ec00152818161250101528181612621015281816127b401528181612b5101526132d001525181818161229f015281816125ff01528181612b8201528181612e5601526136090152f35b015192505f8061010a565b91938316915f805283885f20935f5b8a8883831061053d5750505010610525575b505050811b015f5561011b565b01515f1960f88460031b161c191690555f8080610518565b868601518855909601959485019487935001610506565b5f8052885f208380870160051c8201928b881061058e575b0160051c019084905b8281106105835750506100f0565b5f8155018490610575565b9250819261056c565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100e0565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b604081019081106001600160401b038211176105b557604052565b601f909101601f19168101906001600160401b038211908210176105b557604052565b60405190610618826105cd565b600c82526b2937baba32b921b7b6b6b7b760a11b6020830152565b61066690604051610643816105cd565b60118152702130ba31b42937baba32b921b7b6b6b7b760791b6020820152610669565b90565b906106d6603a60209260405193849181808401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952805191829101603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a8101845201826105e8565b5190205f198101908111610707576040519060208201908152602082526106fc826105cd565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe60806040526004361015610072575b3615610018575f80fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361004a57005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c806308a465f614610e9d57806319c6989f1461084e578063286f580d146107b75780632950286e146106cc57806354fd4d501461058f5780635a3c3987146105665780635e01eb5a146105215780638a12a08c146104c65780638eb1b65e146103bf578063945ed33f14610344578063ac9650d8146103005763e3b5dff40361000e57346102fc576060806003193601126102fc5767ffffffffffffffff6004358181116102fc5761012d9036906004016112c4565b6101356111a1565b6044359283116102fc57610150610158933690600401610fcd565b9390916128b9565b905f5b835181101561017c57805f8761017360019488611691565b5101520161015b565b506101f06101fe610239946101b65f94886040519361019a8561111a565b30855260208501525f1960408501528660608501523691611381565b60808201526040519283917f8a12a08c0000000000000000000000000000000000000000000000000000000060208401526024830161143e565b03601f198101835282611152565b604051809481927fedfa3568000000000000000000000000000000000000000000000000000000008352602060048401526024830190610ffb565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19182156102f1576102a39261028e915f916102cf575b50602080825183010191016115d4565b909391926102a7575b60405193849384610f2f565b0390f35b5f7f00000000000000000000000000000000000000000000000000000000000000005d610297565b6102eb91503d805f833e6102e38183611152565b81019061154d565b8461027e565b6040513d5f823e3d90fd5b5f80fd5b60206003193601126102fc5760043567ffffffffffffffff81116102fc576103386103326102a3923690600401610f9c565b9061179b565b60405191829182611020565b346102fc5761035236610eca565b61035a611945565b610362611972565b6103906102a3610371836128fb565b9193909461038a606061038383611344565b9201611358565b90612729565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d60405193849384610f2f565b60806003193601126102fc5767ffffffffffffffff6004358181116102fc576103ec9036906004016112c4565b906103f56111b7565b906064359081116102fc576101f061048b6102399461045161041c5f953690600401610fcd565b610425336128b9565b97604051946104338661111a565b33865260208601526024356040860152151560608501523691611381565b60808201526040519283917f945ed33f000000000000000000000000000000000000000000000000000000006020840152602483016116d2565b604051809481927f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190610ffb565b346102fc576102a36104ef6104da36610eca565b6104e2611945565b6104ea611972565b611a3b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f009492945d60405193849384610f2f565b346102fc575f6003193601126102fc5760207f00000000000000000000000000000000000000000000000000000000000000005c6001600160a01b0360405191168152f35b346102fc576102a36104ef61057a36610eca565b610582611945565b61058a611972565b6128fb565b346102fc575f6003193601126102fc576040515f80549060018260011c91600184169182156106c2575b60209485851084146106955785879486865291825f146106575750506001146105fe575b506105ea92500383611152565b6102a3604051928284938452830190610ffb565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b85831061063f5750506105ea9350820101856105dd565b80548389018501528794508693909201918101610628565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858201526105ea95151560051b85010192508791506105dd9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926105b9565b346102fc5760606003193601126102fc5767ffffffffffffffff6004358181116102fc576106fe9036906004016112c4565b906107076111a1565b6044359182116102fc5761072261072a923690600401610fcd565b9290916128b9565b905f5b845181101561075f57806fffffffffffffffffffffffffffffffff604061075660019489611691565b5101520161072d565b506101f06101fe8561077d5f94610239976040519361019a8561111a565b60808201526040519283917f5a3c3987000000000000000000000000000000000000000000000000000000006020840152602483016116d2565b60806003193601126102fc5767ffffffffffffffff6004358181116102fc576107e49036906004016112c4565b906107ed6111b7565b906064359081116102fc576101f061048b6102399461081461041c5f953690600401610fcd565b60808201526040519283917f08a465f60000000000000000000000000000000000000000000000000000000060208401526024830161143e565b60a06003193601126102fc5767ffffffffffffffff600435116102fc573660236004350112156102fc5767ffffffffffffffff60043560040135116102fc5736602460c060043560040135026004350101116102fc5760243567ffffffffffffffff81116102fc576108c4903690600401610f9c565b67ffffffffffffffff604435116102fc576060600319604435360301126102fc5760643567ffffffffffffffff81116102fc57610905903690600401610fcd565b60843567ffffffffffffffff81116102fc57610925903690600401610f9c565b949093610930611945565b806004356004013503610e75575f5b600435600401358110610bd25750505060443560040135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd6044353603018212156102fc57816044350160048101359067ffffffffffffffff82116102fc5760248260071b36039101136102fc576109e3575b6102a361033886865f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d61179b565b6001600160a01b039492947f0000000000000000000000000000000000000000000000000000000000000000163b156102fc57604051947f2a2d80d10000000000000000000000000000000000000000000000000000000086523360048701526060602487015260c486019260443501602481019367ffffffffffffffff6004830135116102fc57600482013560071b360385136102fc5760606064890152600482013590529192869260e484019291905f905b60048101358210610b5457505050602091601f19601f865f9787956001600160a01b03610ac860246044350161118d565b16608488015260448035013560a48801526003198787030160448801528186528786013787868286010152011601030181836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19182156102f1576102a39361033893610b45575b8294508193506109b3565b610b4e90611106565b84610b3a565b9195945091926001600160a01b03610b6b8761118d565b168152602080870135916001600160a01b0383168093036102fc57600492600192820152610b9b604089016128a6565b65ffffffffffff8091166040830152610bb660608a016128a6565b1660608201526080809101970193019050889495939291610a97565b610be7610be082848661192a565b3691611381565b604051610bf3816110a1565b5f81526020915f838301525f60408301528281015190606060408201519101515f1a91835283830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc81850260043501360301126102fc5760405190610c60826110ea565b610c73602460c08602600435010161118d565b808352610c89604460c08702600435010161118d565b908185850152610ca2606460c08802600435010161118d565b60408581019190915260043560c08802016084810135606087015260a4810135608087015260c4013560a086015283015183519386015160ff91909116926001600160a01b0383163b156102fc575f6001600160a01b03809460e4948b98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081610e66575b50610e5c57610d7f612877565b906001600160a01b0381511690836001600160a01b0381830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa9182156102f1575f92610e2c575b506060015103610df75750506001905b0161093f565b805115610e045780519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091508381813d8311610e55575b610e448183611152565b810103126102fc5751906060610de1565b503d610e3a565b5050600190610df1565b610e6f90611106565b8a610d72565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fc57610eab36610eca565b610eb3611945565b610ebb611972565b6103906102a361037183611a3b565b600319906020828201126102fc576004359167ffffffffffffffff83116102fc578260a0920301126102fc5760040190565b9081518082526020808093019301915f5b828110610f1b575050505090565b835185529381019392810192600101610f0d565b939290610f4490606086526060860190610efc565b936020948181036020830152602080855192838152019401905f5b818110610f7f57505050610f7c9394506040818403910152610efc565b90565b82516001600160a01b031686529487019491870191600101610f5f565b9181601f840112156102fc5782359167ffffffffffffffff83116102fc576020808501948460051b0101116102fc57565b9181601f840112156102fc5782359167ffffffffffffffff83116102fc57602083818601950101116102fc57565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106110555750505050505090565b9091929394958480611091837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51610ffb565b9801930193019194939290611045565b6060810190811067ffffffffffffffff8211176110bd57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60c0810190811067ffffffffffffffff8211176110bd57604052565b67ffffffffffffffff81116110bd57604052565b60a0810190811067ffffffffffffffff8211176110bd57604052565b60e0810190811067ffffffffffffffff8211176110bd57604052565b90601f601f19910116810190811067ffffffffffffffff8211176110bd57604052565b67ffffffffffffffff81116110bd5760051b60200190565b35906001600160a01b03821682036102fc57565b602435906001600160a01b03821682036102fc57565b6044359081151582036102fc57565b9190916080818403126102fc57604090815191608083019467ffffffffffffffff95848110878211176110bd57825283956112008461118d565b8552602090818501359081116102fc57840182601f820112156102fc5780359061122982611175565b9361123686519586611152565b82855283850190846060809502840101928184116102fc578501915b8383106112745750505050508401528181013590830152606090810135910152565b84838303126102fc57875190611289826110a1565b6112928461118d565b825261129f87850161118d565b87830152888401359081151582036102fc578288928b89950152815201920191611252565b81601f820112156102fc578035916020916112de84611175565b936112ec6040519586611152565b808552838086019160051b830101928084116102fc57848301915b8483106113175750505050505090565b823567ffffffffffffffff81116102fc578691611339848480948901016111c6565b815201920191611307565b356001600160a01b03811681036102fc5790565b3580151581036102fc5790565b67ffffffffffffffff81116110bd57601f01601f191660200190565b92919261138d82611365565b9161139b6040519384611152565b8294818452818301116102fc578281602093845f960137010152565b9060808101916001600160a01b03808251168352602093848301519460808186015285518092528060a086019601925f905b83821061140b5750505050506060816040829301516040850152015191015290565b845180518216895280840151821689850152604090810151151590890152606090970196938201936001909101906113e9565b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106114bd5750505050506080846040610f7c959601516060840152606081015115158284015201519060a0601f1982850301910152610ffb565b909192939583806114f8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a516113b7565b98019201920190939291611481565b81601f820112156102fc5780519061151e82611365565b9261152c6040519485611152565b828452602083830101116102fc57815f9260208093018386015e8301015290565b906020828203126102fc57815167ffffffffffffffff81116102fc57610f7c9201611507565b9080601f830112156102fc5781519060209161158e81611175565b9361159c6040519586611152565b81855260208086019260051b8201019283116102fc57602001905b8282106115c5575050505090565b815181529083019083016115b7565b90916060828403126102fc5781519167ffffffffffffffff928381116102fc5784611600918301611573565b936020808301518581116102fc5783019082601f830112156102fc5781519161162883611175565b926116366040519485611152565b808452828085019160051b830101918583116102fc578301905b82821061167257505050509360408301519081116102fc57610f7c9201611573565b81516001600160a01b03811681036102fc578152908301908301611650565b80518210156116a55760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106117515750505050506080846040610f7c959601516060840152606081015115158284015201519060a0601f1982850301910152610ffb565b9091929395838061178c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a516113b7565b98019201920190939291611715565b91906117a6336128b9565b907f000000000000000000000000000000000000000000000000000000000000000093845c6118b1576001906001865d6117df83611175565b926117ed6040519485611152565b808452601f196117fc82611175565b015f5b8181106118a05750505f5b8181106118575750505050905f61184c92945d7f0000000000000000000000000000000000000000000000000000000000000000805c9161184e575b506136b1565b565b5f905d5f611846565b806118845f8061186c610be08996888a61192a565b602081519101305af461187d612877565b903061415c565b61188e8288611691565b526118998187611691565b500161180a565b8060606020809389010152016117ff565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102fc570180359067ffffffffffffffff82116102fc576020019181360383136102fc57565b908210156116a5576119419160051b8101906118d9565b9091565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c6118b1576001905d565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119a457565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b906119da82611175565b6119e76040519182611152565b828152601f196119f78294611175565b0190602036910137565b91908201809211611a0e57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b604081013542116126c35790611a5e611a5760208401846136f4565b90506119d0565b915f5b611a6e60208301836136f4565b90508110156125c757611a9881611a93611a8b60208601866136f4565b369391613748565b6111c6565b936040850151936001600160a01b038651169060208701518051156116a55760200151604001511515806125be575b1561256357611aec611ad886611344565b8784611ae660608a01611358565b92613add565b5f5b60208801515181101561255357611b03613788565b6020890151515f198101908111611a0e578214806020830152821582525f1461254c576060890151905b611b3b8360208c0151611691565b51604081015190919015611cee57611bd36001600160a01b03835116936001600160a01b03881685145f14611ce7576001945b60405195611b7b8761111a565b5f8752611b87816137be565b6020870152604086015260609485918d838301526080820152604051809381927f43583be500000000000000000000000000000000000000000000000000000000835260048301613a22565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94611cb0575b50506020015115611c9657816001600160a01b036020611c909360019695611c388c8c611691565b5201611c67828251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b5051167f000000000000000000000000000000000000000000000000000000000000000061420a565b01611aee565b602001519097506001600160a01b03169250600190611c90565b60209294509081611cd592903d10611ce0575b611ccd8183611152565b8101906137f5565b91505092905f611c10565b503d611cc3565b5f94611b6e565b888a6001600160a01b038495945116806001600160a01b038a16145f14612132575050815115905061206e57888a80151580612053575b611f4d575b6001600160a01b03939291611ddd82611e15978b5f95897f0000000000000000000000000000000000000000000000000000000000000000921680885282602052604088205c611f3c575b5050505b6001611d9c8983511660208401998b8b51169080158a14611f3657508391614223565b999092511694611db1608091828101906118d9565b93909460405197611dc1896110ea565b8852306020890152604088015260608701528501523691611381565b60a0820152604051809681927f21457897000000000000000000000000000000000000000000000000000000008352600483016139b1565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94611f0c575b506020015115611ee95791611ebc826001600160a01b0360019695611e7a611ee49686611691565b51611e858d8d611691565b52611eb3828251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b50511692611691565b51907f000000000000000000000000000000000000000000000000000000000000000061420a565b611c90565b98506001929450611f02906001600160a01b0392611691565b5197511692611c90565b6020919450611f2c903d805f833e611f248183611152565b810190613969565b5094919050611e52565b91614223565b611f4592614341565b5f8281611d75565b50611f5a90929192611344565b91611f648b6142fd565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b156102fc576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039485166004820152306024820152908416604482015292871660648401525f8380608481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f1578a611ddd8d611e15976001600160a01b03975f95612044575b50975092505091929350611d2a565b61204d90611106565b5f612035565b5061205d82611344565b6001600160a01b0316301415611d25565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916001600160a01b0384511692803b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03949094166004850152306024850152604484018c90525f908490606490829084905af180156102f1578a611ddd8d611e15976001600160a01b03975f95612123575b50611d79565b61212c90611106565b5f61211d565b6001600160a01b0360208796949701511690898183145f146123d7576121cd925061220597915060016121735f96956001600160a01b0393848b5116614223565b509282895116956020890151151588146123ae5761219082611344565b945b6121a1608093848101906118d9565b959096604051996121b18b6110ea565b8a52166020890152604088015260608701528501523691611381565b60a0820152604051809581927f4af29ec4000000000000000000000000000000000000000000000000000000008352600483016138f8565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156102f1575f93612384575b5060200151156122c357816001600160a01b036020611ee493600196956122698c8c611691565b526122998383830151167f00000000000000000000000000000000000000000000000000000000000000006141c0565b500151167f000000000000000000000000000000000000000000000000000000000000000061420a565b60208181015191516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101859052939a50909116945081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f157612359575b50600190611c90565b602090813d831161237d575b61236f8183611152565b810103126102fc575f612350565b503d612365565b60209193506123a4903d805f833e61239c8183611152565b81019061387c565b5093919050612242565b837f00000000000000000000000000000000000000000000000000000000000000001694612192565b6001600160a01b036124669561242e9394956123f860809b8c8101906118d9565b9390946040519761240889611136565b5f8952602089015216604087015260609a8b978888015286015260a08501523691611381565b60c0820152604051809381927f2bfb780c00000000000000000000000000000000000000000000000000000000835260048301613810565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94612525575b50506020015115611c9657816001600160a01b036020611ee493600196956124cb8c8c611691565b526124fb8383830151167f00000000000000000000000000000000000000000000000000000000000000006141c0565b500151167f000000000000000000000000000000000000000000000000000000000000000061420a565b6020929450908161254192903d10611ce057611ccd8183611152565b91505092905f6124a3565b5f90611b2d565b5091955090935050600101611a61565b61258d827f00000000000000000000000000000000000000000000000000000000000000006141c0565b506125b986837f000000000000000000000000000000000000000000000000000000000000000061420a565b611aec565b50321515611ac7565b50506125f27f0000000000000000000000000000000000000000000000000000000000000000613a71565b916125fd83516119d0565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b86518110156126ba576001906001600160a01b0380612663838b611691565b51165f528560205261269160405f205c8261267e858d611691565b51165f528860205260405f205c90611a01565b61269b8387611691565b526126a6828a611691565b51165f52856020525f604081205d01612644565b50949391509150565b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f198201918213600116611a0e57565b7f80000000000000000000000000000000000000000000000000000000000000008114611a0e575f190190565b907f000000000000000000000000000000000000000000000000000000000000000090815c7f0000000000000000000000000000000000000000000000000000000000000000612779815c6126eb565b907f0000000000000000000000000000000000000000000000000000000000000000915b5f81121561283a575050506127b1906126eb565b917f0000000000000000000000000000000000000000000000000000000000000000925b5f8112156127ea575050505061184c906136b1565b61283590825f5261282f60205f83828220015c91828252888152886040916128228a8d8587205c906001600160a01b03891690613eb0565b8484525281205d84613e0d565b506126fc565b6127d5565b61287290825f5261282f60205f8a8785848420015c938484528181526128228c6040948587205c906001600160a01b03891690613add565b61279d565b3d156128a1573d9061288882611365565b916128966040519384611152565b82523d5f602084013e565b606090565b359065ffffffffffff821682036102fc57565b905f917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03815c16156128f1575050565b909192505d600190565b90604082013542116126c357612917611a5760208401846136f4565b915f5b61292760208301836136f4565b90508110156135d15761294481611a93611a8b60208601866136f4565b60608101519061297e6001600160a01b038251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b506020810151515f198101908111611a0e575b5f8112156129a45750505060010161291a565b6129b2816020840151611691565b516129bb613788565b9082156020830152602084015151805f19810111611a0e575f1901831480835261358f575b6020820151156135545760408401516001600160a01b03855116915b604081015115612c1d5783916001600160a01b036060926020612aa0970151151580612c14575b612bed575b5116906001600160a01b0385168203612be6576001915b60405192612a4c8461111a565b60018452612a59816137be565b6020840152604083015288838301526080820152604051809581927f43583be500000000000000000000000000000000000000000000000000000000835260048301613a22565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156102f15787918b915f95612bbf575b506020015115612bb057612ba69284612b02612bab979694612b7594611691565b52612b366001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006141c0565b506001600160a01b03612b4d8460408a01516137b1565b91167f000000000000000000000000000000000000000000000000000000000000000061420a565b6001600160a01b038551167f000000000000000000000000000000000000000000000000000000000000000061420a565b6126fc565b612991565b505050612bab919350926126fc565b6020919550612bdc9060603d606011611ce057611ccd8183611152565b5095919050612ae1565b5f91612a3f565b612c0f612bf98d611344565b8d8b611ae6886040888451169301519301611358565b612a28565b50321515612a23565b906001600160a01b03825116806001600160a01b038516145f14613137575060208401516130495750604051927f967870920000000000000000000000000000000000000000000000000000000084526001600160a01b03831660048501526020846024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9384156102f1575f94613015575b5083916001600160a01b038151166001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015230602482015260448101959095525f8580606481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156102f157612dec955f92613006575b505b611ddd6001600160a01b03612da88b828551168360208701511690614223565b50925116918c6002612dbf608092838101906118d9565b92909360405196612dcf886110ea565b875230602088015289604088015260608701528501523691611381565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94612fe3575b506020015115612ecf57908291612bab9493612e45898d611691565b52612e7a836001600160a01b0384167f000000000000000000000000000000000000000000000000000000000000000061420a565b80831080612eb4575b612e90575b5050506126fc565b612ea6612eac93612ea08b611344565b926137b1565b91614356565b5f8080612e88565b50306001600160a01b03612ec78b611344565b161415612e83565b9450908094808210612ee8575b505050612bab906126fc565b91612ef8602092612f77946137b1565b90612f2d826001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683614356565b60405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f157612fb8575b8080612edc565b602090813d8311612fdc575b612fce8183611152565b810103126102fc575f612fb1565b503d612fc4565b6020919450612ffb903d805f833e611f248183611152565b509094919050612e29565b61300f90611106565b5f612d86565b9093506020813d602011613041575b8161303160209383611152565b810103126102fc5751925f612cbc565b3d9150613024565b909261305489611344565b6001600160a01b033091160361306f575b5f612dec94612d88565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016936130a38a611344565b6130ac846142fd565b90863b156102fc576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152306024820152918116604483015285166064820152945f908690608490829084905af19081156102f157612dec955f92613128575b50945050613065565b61313190611106565b5f61311f565b6001600160a01b036020849695940151168a8282145f1461340b5750505061320c61316e5f92846001600160a01b03885116614223565b92906131d48c6001600160a01b03808a5116938951151586146133df576131a361319784611344565b935b60808101906118d9565b929093604051966131b3886110ea565b875216602086015260408501528c6060850152600260808501523691611381565b60a0820152604051809381927f4af29ec4000000000000000000000000000000000000000000000000000000008352600483016138f8565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156102f1575f916133c4575b5060208401518c908a90156133aa5783836001600160a01b03936132836132899461327c8f9c9b9a98996132b29a611691565b5192611691565b52611691565b5191167f000000000000000000000000000000000000000000000000000000000000000061420a565b51156132f457612bab92916001600160a01b036020612ba6930151167f0000000000000000000000000000000000000000000000000000000000000000614341565b516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024810191909152602081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f15761337f575b50612bab906126fc565b602090813d83116133a3575b6133958183611152565b810103126102fc575f613375565b503d61338b565b50509091506133bb92939650611691565b519384916132b2565b6133d891503d805f833e61239c8183611152565b9050613249565b6131a3827f00000000000000000000000000000000000000000000000000000000000000001693613199565b61349e965090613466916060948b61342b608099989993848101906118d9565b9390946040519761343b89611136565b6001895260208901526001600160a01b038b1660408901528888015286015260a08501523691611381565b60c0820152604051809581927f2bfb780c00000000000000000000000000000000000000000000000000000000835260048301613810565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156102f15787918b915f9561352d575b506020015115612bb057612ba69284613505612bab9796946001600160a01b0394611691565b52167f000000000000000000000000000000000000000000000000000000000000000061420a565b602091955061354a9060603d606011611ce057611ccd8183611152565b50959190506134df565b6fffffffffffffffffffffffffffffffff6001600160a01b0360206135858188015161357f886126eb565b90611691565b51015116916129fc565b6135cc856001600160a01b0360208401611c67828251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b6129e0565b50506135fc7f0000000000000000000000000000000000000000000000000000000000000000613a71565b9161360783516119d0565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b86518110156126ba576001906001600160a01b038061366d838b611691565b51165f528560205261368860405f205c8261267e858d611691565b6136928387611691565b5261369d828a611691565b51165f52856020525f604081205d0161364e565b4780156136f0577f00000000000000000000000000000000000000000000000000000000000000005c6136f0576001600160a01b0361184c92166140e0565b5050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102fc570180359067ffffffffffffffff82116102fc57602001918160051b360383136102fc57565b91908110156116a55760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81813603018212156102fc570190565b604051906040820182811067ffffffffffffffff8211176110bd576040525f6020838281520152565b91908203918211611a0e57565b600211156137c857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b908160609103126102fc578051916040602083015192015190565b61010060c0610f7c93602084528051613828816137be565b602085015260208101516001600160a01b0380911660408601528060408301511660608601526060820151166080850152608081015160a085015260a08101518285015201519160e0808201520190610ffb565b90916060828403126102fc5781519167ffffffffffffffff928381116102fc57846138a8918301611573565b9360208201519360408301519081116102fc57610f7c9201611507565b9081518082526020808093019301915f5b8281106138e4575050505090565b8351855293810193928101926001016138d6565b602081526001600160a01b038083511660208301526020830151166040820152613931604083015160c0606084015260e08301906138c5565b9060608301516080820152608083015160058110156137c857610f7c9360a0918284015201519060c0601f1982850301910152610ffb565b916060838303126102fc5782519260208101519267ffffffffffffffff938481116102fc578161399a918401611573565b9360408301519081116102fc57610f7c9201611507565b602081526001600160a01b038083511660208301526020830151166040820152604082015160608201526139f4606083015160c0608084015260e08301906138c5565b90608083015160048110156137c857610f7c9360a0918284015201519060c0601f1982850301910152610ffb565b91909160808060a08301948051613a38816137be565b84526020810151613a48816137be565b60208501526001600160a01b036040820151166040850152606081015160608501520151910152565b90815c613a7d81611175565b613a8a6040519182611152565b818152613a9682611175565b601f196020910136602084013781945f5b848110613ab5575050505050565b600190825f5280845f20015c6001600160a01b03613ad38388611691565b9116905201613aa7565b919280613dd8575b15613c51575050804710613c29576001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691823b156102fc57604051907fd0e30db00000000000000000000000000000000000000000000000000000000082525f915f8160048185895af180156102f157613c12575b506044602092937f00000000000000000000000000000000000000000000000000000000000000001694613b98838783614356565b8460405196879485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af1908115613c065750613bdf5750565b602090813d8311613bff575b613bf58183611152565b810103126102fc57565b503d613beb565b604051903d90823e3d90fd5b60209250613c1f90611106565b60445f9250613b63565b7fa01a9df6000000000000000000000000000000000000000000000000000000005f5260045ffd5b90915f9080613c61575b50505050565b6001600160a01b0393847f00000000000000000000000000000000000000000000000000000000000000001694807f00000000000000000000000000000000000000000000000000000000000000001691613cbb846142fd565b96803b156102fc576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152848316602482015297821660448901529186161660648701525f908690608490829084905af19485156102f157613d8095613dc4575b5082936020936040518097819582947f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03925af1908115613c065750613d99575b808080613c5b565b602090813d8311613dbd575b613daf8183611152565b810103126102fc575f613d91565b503d613da5565b60209350613dd190611106565b5f92613d2f565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614613ae5565b6001810191805f5260209183835260405f205c8015155f14613ea7575f1990818101835c8380820191828403613e6a575b5050505050815c81810192818411611a0e575f93815d835284832001015d5f52525f604081205d600190565b613e77613e87938861443a565b865f52885f2001015c918561443a565b835f52808383885f2001015d5f5285855260405f205d5f80808381613e3e565b50505050505f90565b5f949383156140d857806140a3575b15614007576001600160a01b0391827f000000000000000000000000000000000000000000000000000000000000000016803b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03929092166004830152306024830152604482018590525f908290606490829084905af180156102f157613ff4575b5084827f000000000000000000000000000000000000000000000000000000000000000016803b15613ff05781906024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528960048401525af18015613fe557613fcd575b5061184c939450166140e0565b613fd78691611106565b613fe15784613fc0565b8480fd5b6040513d88823e3d90fd5b5080fd5b613fff919550611106565b5f935f613f53565b929350906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af180156102f15761409a5750565b61184c90611106565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690831614613ebf565b505050509050565b814710614130575f8080936001600160a01b038294165af1614100612877565b501561410857565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b90614171575080511561410857805190602001fd5b815115806141b7575b614182575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561417a565b6001810190825f528160205260405f205c155f1461420357805c815f52838160205f20015d60018101809111611a0e57815d5c915f5260205260405f205d600190565b5050505f90565b905f5260205261421f60405f2091825c611a01565b905d565b916044929391936001600160a01b03604094859282808551998a9586947fc9c1661b0000000000000000000000000000000000000000000000000000000086521660048501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9384156142f3575f935f956142bc575b50506142b96142b285946119d0565b9485611691565b52565b809295508194503d83116142ec575b6142d58183611152565b810103126102fc5760208251920151925f806142a3565b503d6142cb565b83513d5f823e3d90fd5b6001600160a01b0390818111614311571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b905f5260205261421f60405f2091825c6137b1565b6040519260208401907fa9059cbb0000000000000000000000000000000000000000000000000000000082526001600160a01b038094166024860152604485015260448452608084019084821067ffffffffffffffff8311176110bd576143d5935f9384936040521694519082865af16143ce612877565b908361415c565b8051908115159182614416575b50506143eb5750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81925090602091810103126102fc57602001518015908115036102fc575f806143e2565b5c111561444357565b7f0f4ae0e4000000000000000000000000000000000000000000000000000000005f5260045ffdfea2646970667358221220229a5cf89aa7c2d0a4b4d5db20bba6c2b3a74b080303fc6ec00ba582a5dcf75164736f6c634300081a0033",
- "deployedBytecode": "0x60806040526004361015610072575b3615610018575f80fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361004a57005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c806308a465f614610e9d57806319c6989f1461084e578063286f580d146107b75780632950286e146106cc57806354fd4d501461058f5780635a3c3987146105665780635e01eb5a146105215780638a12a08c146104c65780638eb1b65e146103bf578063945ed33f14610344578063ac9650d8146103005763e3b5dff40361000e57346102fc576060806003193601126102fc5767ffffffffffffffff6004358181116102fc5761012d9036906004016112c4565b6101356111a1565b6044359283116102fc57610150610158933690600401610fcd565b9390916128b9565b905f5b835181101561017c57805f8761017360019488611691565b5101520161015b565b506101f06101fe610239946101b65f94886040519361019a8561111a565b30855260208501525f1960408501528660608501523691611381565b60808201526040519283917f8a12a08c0000000000000000000000000000000000000000000000000000000060208401526024830161143e565b03601f198101835282611152565b604051809481927fedfa3568000000000000000000000000000000000000000000000000000000008352602060048401526024830190610ffb565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19182156102f1576102a39261028e915f916102cf575b50602080825183010191016115d4565b909391926102a7575b60405193849384610f2f565b0390f35b5f7f00000000000000000000000000000000000000000000000000000000000000005d610297565b6102eb91503d805f833e6102e38183611152565b81019061154d565b8461027e565b6040513d5f823e3d90fd5b5f80fd5b60206003193601126102fc5760043567ffffffffffffffff81116102fc576103386103326102a3923690600401610f9c565b9061179b565b60405191829182611020565b346102fc5761035236610eca565b61035a611945565b610362611972565b6103906102a3610371836128fb565b9193909461038a606061038383611344565b9201611358565b90612729565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d60405193849384610f2f565b60806003193601126102fc5767ffffffffffffffff6004358181116102fc576103ec9036906004016112c4565b906103f56111b7565b906064359081116102fc576101f061048b6102399461045161041c5f953690600401610fcd565b610425336128b9565b97604051946104338661111a565b33865260208601526024356040860152151560608501523691611381565b60808201526040519283917f945ed33f000000000000000000000000000000000000000000000000000000006020840152602483016116d2565b604051809481927f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190610ffb565b346102fc576102a36104ef6104da36610eca565b6104e2611945565b6104ea611972565b611a3b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f009492945d60405193849384610f2f565b346102fc575f6003193601126102fc5760207f00000000000000000000000000000000000000000000000000000000000000005c6001600160a01b0360405191168152f35b346102fc576102a36104ef61057a36610eca565b610582611945565b61058a611972565b6128fb565b346102fc575f6003193601126102fc576040515f80549060018260011c91600184169182156106c2575b60209485851084146106955785879486865291825f146106575750506001146105fe575b506105ea92500383611152565b6102a3604051928284938452830190610ffb565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b85831061063f5750506105ea9350820101856105dd565b80548389018501528794508693909201918101610628565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858201526105ea95151560051b85010192508791506105dd9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926105b9565b346102fc5760606003193601126102fc5767ffffffffffffffff6004358181116102fc576106fe9036906004016112c4565b906107076111a1565b6044359182116102fc5761072261072a923690600401610fcd565b9290916128b9565b905f5b845181101561075f57806fffffffffffffffffffffffffffffffff604061075660019489611691565b5101520161072d565b506101f06101fe8561077d5f94610239976040519361019a8561111a565b60808201526040519283917f5a3c3987000000000000000000000000000000000000000000000000000000006020840152602483016116d2565b60806003193601126102fc5767ffffffffffffffff6004358181116102fc576107e49036906004016112c4565b906107ed6111b7565b906064359081116102fc576101f061048b6102399461081461041c5f953690600401610fcd565b60808201526040519283917f08a465f60000000000000000000000000000000000000000000000000000000060208401526024830161143e565b60a06003193601126102fc5767ffffffffffffffff600435116102fc573660236004350112156102fc5767ffffffffffffffff60043560040135116102fc5736602460c060043560040135026004350101116102fc5760243567ffffffffffffffff81116102fc576108c4903690600401610f9c565b67ffffffffffffffff604435116102fc576060600319604435360301126102fc5760643567ffffffffffffffff81116102fc57610905903690600401610fcd565b60843567ffffffffffffffff81116102fc57610925903690600401610f9c565b949093610930611945565b806004356004013503610e75575f5b600435600401358110610bd25750505060443560040135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd6044353603018212156102fc57816044350160048101359067ffffffffffffffff82116102fc5760248260071b36039101136102fc576109e3575b6102a361033886865f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d61179b565b6001600160a01b039492947f0000000000000000000000000000000000000000000000000000000000000000163b156102fc57604051947f2a2d80d10000000000000000000000000000000000000000000000000000000086523360048701526060602487015260c486019260443501602481019367ffffffffffffffff6004830135116102fc57600482013560071b360385136102fc5760606064890152600482013590529192869260e484019291905f905b60048101358210610b5457505050602091601f19601f865f9787956001600160a01b03610ac860246044350161118d565b16608488015260448035013560a48801526003198787030160448801528186528786013787868286010152011601030181836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19182156102f1576102a39361033893610b45575b8294508193506109b3565b610b4e90611106565b84610b3a565b9195945091926001600160a01b03610b6b8761118d565b168152602080870135916001600160a01b0383168093036102fc57600492600192820152610b9b604089016128a6565b65ffffffffffff8091166040830152610bb660608a016128a6565b1660608201526080809101970193019050889495939291610a97565b610be7610be082848661192a565b3691611381565b604051610bf3816110a1565b5f81526020915f838301525f60408301528281015190606060408201519101515f1a91835283830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc81850260043501360301126102fc5760405190610c60826110ea565b610c73602460c08602600435010161118d565b808352610c89604460c08702600435010161118d565b908185850152610ca2606460c08802600435010161118d565b60408581019190915260043560c08802016084810135606087015260a4810135608087015260c4013560a086015283015183519386015160ff91909116926001600160a01b0383163b156102fc575f6001600160a01b03809460e4948b98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081610e66575b50610e5c57610d7f612877565b906001600160a01b0381511690836001600160a01b0381830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa9182156102f1575f92610e2c575b506060015103610df75750506001905b0161093f565b805115610e045780519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091508381813d8311610e55575b610e448183611152565b810103126102fc5751906060610de1565b503d610e3a565b5050600190610df1565b610e6f90611106565b8a610d72565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fc57610eab36610eca565b610eb3611945565b610ebb611972565b6103906102a361037183611a3b565b600319906020828201126102fc576004359167ffffffffffffffff83116102fc578260a0920301126102fc5760040190565b9081518082526020808093019301915f5b828110610f1b575050505090565b835185529381019392810192600101610f0d565b939290610f4490606086526060860190610efc565b936020948181036020830152602080855192838152019401905f5b818110610f7f57505050610f7c9394506040818403910152610efc565b90565b82516001600160a01b031686529487019491870191600101610f5f565b9181601f840112156102fc5782359167ffffffffffffffff83116102fc576020808501948460051b0101116102fc57565b9181601f840112156102fc5782359167ffffffffffffffff83116102fc57602083818601950101116102fc57565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106110555750505050505090565b9091929394958480611091837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51610ffb565b9801930193019194939290611045565b6060810190811067ffffffffffffffff8211176110bd57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60c0810190811067ffffffffffffffff8211176110bd57604052565b67ffffffffffffffff81116110bd57604052565b60a0810190811067ffffffffffffffff8211176110bd57604052565b60e0810190811067ffffffffffffffff8211176110bd57604052565b90601f601f19910116810190811067ffffffffffffffff8211176110bd57604052565b67ffffffffffffffff81116110bd5760051b60200190565b35906001600160a01b03821682036102fc57565b602435906001600160a01b03821682036102fc57565b6044359081151582036102fc57565b9190916080818403126102fc57604090815191608083019467ffffffffffffffff95848110878211176110bd57825283956112008461118d565b8552602090818501359081116102fc57840182601f820112156102fc5780359061122982611175565b9361123686519586611152565b82855283850190846060809502840101928184116102fc578501915b8383106112745750505050508401528181013590830152606090810135910152565b84838303126102fc57875190611289826110a1565b6112928461118d565b825261129f87850161118d565b87830152888401359081151582036102fc578288928b89950152815201920191611252565b81601f820112156102fc578035916020916112de84611175565b936112ec6040519586611152565b808552838086019160051b830101928084116102fc57848301915b8483106113175750505050505090565b823567ffffffffffffffff81116102fc578691611339848480948901016111c6565b815201920191611307565b356001600160a01b03811681036102fc5790565b3580151581036102fc5790565b67ffffffffffffffff81116110bd57601f01601f191660200190565b92919261138d82611365565b9161139b6040519384611152565b8294818452818301116102fc578281602093845f960137010152565b9060808101916001600160a01b03808251168352602093848301519460808186015285518092528060a086019601925f905b83821061140b5750505050506060816040829301516040850152015191015290565b845180518216895280840151821689850152604090810151151590890152606090970196938201936001909101906113e9565b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106114bd5750505050506080846040610f7c959601516060840152606081015115158284015201519060a0601f1982850301910152610ffb565b909192939583806114f8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a516113b7565b98019201920190939291611481565b81601f820112156102fc5780519061151e82611365565b9261152c6040519485611152565b828452602083830101116102fc57815f9260208093018386015e8301015290565b906020828203126102fc57815167ffffffffffffffff81116102fc57610f7c9201611507565b9080601f830112156102fc5781519060209161158e81611175565b9361159c6040519586611152565b81855260208086019260051b8201019283116102fc57602001905b8282106115c5575050505090565b815181529083019083016115b7565b90916060828403126102fc5781519167ffffffffffffffff928381116102fc5784611600918301611573565b936020808301518581116102fc5783019082601f830112156102fc5781519161162883611175565b926116366040519485611152565b808452828085019160051b830101918583116102fc578301905b82821061167257505050509360408301519081116102fc57610f7c9201611573565b81516001600160a01b03811681036102fc578152908301908301611650565b80518210156116a55760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106117515750505050506080846040610f7c959601516060840152606081015115158284015201519060a0601f1982850301910152610ffb565b9091929395838061178c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a516113b7565b98019201920190939291611715565b91906117a6336128b9565b907f000000000000000000000000000000000000000000000000000000000000000093845c6118b1576001906001865d6117df83611175565b926117ed6040519485611152565b808452601f196117fc82611175565b015f5b8181106118a05750505f5b8181106118575750505050905f61184c92945d7f0000000000000000000000000000000000000000000000000000000000000000805c9161184e575b506136b1565b565b5f905d5f611846565b806118845f8061186c610be08996888a61192a565b602081519101305af461187d612877565b903061415c565b61188e8288611691565b526118998187611691565b500161180a565b8060606020809389010152016117ff565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102fc570180359067ffffffffffffffff82116102fc576020019181360383136102fc57565b908210156116a5576119419160051b8101906118d9565b9091565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c6118b1576001905d565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119a457565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b906119da82611175565b6119e76040519182611152565b828152601f196119f78294611175565b0190602036910137565b91908201809211611a0e57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b604081013542116126c35790611a5e611a5760208401846136f4565b90506119d0565b915f5b611a6e60208301836136f4565b90508110156125c757611a9881611a93611a8b60208601866136f4565b369391613748565b6111c6565b936040850151936001600160a01b038651169060208701518051156116a55760200151604001511515806125be575b1561256357611aec611ad886611344565b8784611ae660608a01611358565b92613add565b5f5b60208801515181101561255357611b03613788565b6020890151515f198101908111611a0e578214806020830152821582525f1461254c576060890151905b611b3b8360208c0151611691565b51604081015190919015611cee57611bd36001600160a01b03835116936001600160a01b03881685145f14611ce7576001945b60405195611b7b8761111a565b5f8752611b87816137be565b6020870152604086015260609485918d838301526080820152604051809381927f43583be500000000000000000000000000000000000000000000000000000000835260048301613a22565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94611cb0575b50506020015115611c9657816001600160a01b036020611c909360019695611c388c8c611691565b5201611c67828251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b5051167f000000000000000000000000000000000000000000000000000000000000000061420a565b01611aee565b602001519097506001600160a01b03169250600190611c90565b60209294509081611cd592903d10611ce0575b611ccd8183611152565b8101906137f5565b91505092905f611c10565b503d611cc3565b5f94611b6e565b888a6001600160a01b038495945116806001600160a01b038a16145f14612132575050815115905061206e57888a80151580612053575b611f4d575b6001600160a01b03939291611ddd82611e15978b5f95897f0000000000000000000000000000000000000000000000000000000000000000921680885282602052604088205c611f3c575b5050505b6001611d9c8983511660208401998b8b51169080158a14611f3657508391614223565b999092511694611db1608091828101906118d9565b93909460405197611dc1896110ea565b8852306020890152604088015260608701528501523691611381565b60a0820152604051809681927f21457897000000000000000000000000000000000000000000000000000000008352600483016139b1565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94611f0c575b506020015115611ee95791611ebc826001600160a01b0360019695611e7a611ee49686611691565b51611e858d8d611691565b52611eb3828251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b50511692611691565b51907f000000000000000000000000000000000000000000000000000000000000000061420a565b611c90565b98506001929450611f02906001600160a01b0392611691565b5197511692611c90565b6020919450611f2c903d805f833e611f248183611152565b810190613969565b5094919050611e52565b91614223565b611f4592614341565b5f8281611d75565b50611f5a90929192611344565b91611f648b6142fd565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b156102fc576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039485166004820152306024820152908416604482015292871660648401525f8380608481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f1578a611ddd8d611e15976001600160a01b03975f95612044575b50975092505091929350611d2a565b61204d90611106565b5f612035565b5061205d82611344565b6001600160a01b0316301415611d25565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916001600160a01b0384511692803b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03949094166004850152306024850152604484018c90525f908490606490829084905af180156102f1578a611ddd8d611e15976001600160a01b03975f95612123575b50611d79565b61212c90611106565b5f61211d565b6001600160a01b0360208796949701511690898183145f146123d7576121cd925061220597915060016121735f96956001600160a01b0393848b5116614223565b509282895116956020890151151588146123ae5761219082611344565b945b6121a1608093848101906118d9565b959096604051996121b18b6110ea565b8a52166020890152604088015260608701528501523691611381565b60a0820152604051809581927f4af29ec4000000000000000000000000000000000000000000000000000000008352600483016138f8565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156102f1575f93612384575b5060200151156122c357816001600160a01b036020611ee493600196956122698c8c611691565b526122998383830151167f00000000000000000000000000000000000000000000000000000000000000006141c0565b500151167f000000000000000000000000000000000000000000000000000000000000000061420a565b60208181015191516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101859052939a50909116945081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f157612359575b50600190611c90565b602090813d831161237d575b61236f8183611152565b810103126102fc575f612350565b503d612365565b60209193506123a4903d805f833e61239c8183611152565b81019061387c565b5093919050612242565b837f00000000000000000000000000000000000000000000000000000000000000001694612192565b6001600160a01b036124669561242e9394956123f860809b8c8101906118d9565b9390946040519761240889611136565b5f8952602089015216604087015260609a8b978888015286015260a08501523691611381565b60c0820152604051809381927f2bfb780c00000000000000000000000000000000000000000000000000000000835260048301613810565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94612525575b50506020015115611c9657816001600160a01b036020611ee493600196956124cb8c8c611691565b526124fb8383830151167f00000000000000000000000000000000000000000000000000000000000000006141c0565b500151167f000000000000000000000000000000000000000000000000000000000000000061420a565b6020929450908161254192903d10611ce057611ccd8183611152565b91505092905f6124a3565b5f90611b2d565b5091955090935050600101611a61565b61258d827f00000000000000000000000000000000000000000000000000000000000000006141c0565b506125b986837f000000000000000000000000000000000000000000000000000000000000000061420a565b611aec565b50321515611ac7565b50506125f27f0000000000000000000000000000000000000000000000000000000000000000613a71565b916125fd83516119d0565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b86518110156126ba576001906001600160a01b0380612663838b611691565b51165f528560205261269160405f205c8261267e858d611691565b51165f528860205260405f205c90611a01565b61269b8387611691565b526126a6828a611691565b51165f52856020525f604081205d01612644565b50949391509150565b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f198201918213600116611a0e57565b7f80000000000000000000000000000000000000000000000000000000000000008114611a0e575f190190565b907f000000000000000000000000000000000000000000000000000000000000000090815c7f0000000000000000000000000000000000000000000000000000000000000000612779815c6126eb565b907f0000000000000000000000000000000000000000000000000000000000000000915b5f81121561283a575050506127b1906126eb565b917f0000000000000000000000000000000000000000000000000000000000000000925b5f8112156127ea575050505061184c906136b1565b61283590825f5261282f60205f83828220015c91828252888152886040916128228a8d8587205c906001600160a01b03891690613eb0565b8484525281205d84613e0d565b506126fc565b6127d5565b61287290825f5261282f60205f8a8785848420015c938484528181526128228c6040948587205c906001600160a01b03891690613add565b61279d565b3d156128a1573d9061288882611365565b916128966040519384611152565b82523d5f602084013e565b606090565b359065ffffffffffff821682036102fc57565b905f917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03815c16156128f1575050565b909192505d600190565b90604082013542116126c357612917611a5760208401846136f4565b915f5b61292760208301836136f4565b90508110156135d15761294481611a93611a8b60208601866136f4565b60608101519061297e6001600160a01b038251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b506020810151515f198101908111611a0e575b5f8112156129a45750505060010161291a565b6129b2816020840151611691565b516129bb613788565b9082156020830152602084015151805f19810111611a0e575f1901831480835261358f575b6020820151156135545760408401516001600160a01b03855116915b604081015115612c1d5783916001600160a01b036060926020612aa0970151151580612c14575b612bed575b5116906001600160a01b0385168203612be6576001915b60405192612a4c8461111a565b60018452612a59816137be565b6020840152604083015288838301526080820152604051809581927f43583be500000000000000000000000000000000000000000000000000000000835260048301613a22565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156102f15787918b915f95612bbf575b506020015115612bb057612ba69284612b02612bab979694612b7594611691565b52612b366001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006141c0565b506001600160a01b03612b4d8460408a01516137b1565b91167f000000000000000000000000000000000000000000000000000000000000000061420a565b6001600160a01b038551167f000000000000000000000000000000000000000000000000000000000000000061420a565b6126fc565b612991565b505050612bab919350926126fc565b6020919550612bdc9060603d606011611ce057611ccd8183611152565b5095919050612ae1565b5f91612a3f565b612c0f612bf98d611344565b8d8b611ae6886040888451169301519301611358565b612a28565b50321515612a23565b906001600160a01b03825116806001600160a01b038516145f14613137575060208401516130495750604051927f967870920000000000000000000000000000000000000000000000000000000084526001600160a01b03831660048501526020846024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9384156102f1575f94613015575b5083916001600160a01b038151166001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015230602482015260448101959095525f8580606481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156102f157612dec955f92613006575b505b611ddd6001600160a01b03612da88b828551168360208701511690614223565b50925116918c6002612dbf608092838101906118d9565b92909360405196612dcf886110ea565b875230602088015289604088015260608701528501523691611381565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19384156102f1575f94612fe3575b506020015115612ecf57908291612bab9493612e45898d611691565b52612e7a836001600160a01b0384167f000000000000000000000000000000000000000000000000000000000000000061420a565b80831080612eb4575b612e90575b5050506126fc565b612ea6612eac93612ea08b611344565b926137b1565b91614356565b5f8080612e88565b50306001600160a01b03612ec78b611344565b161415612e83565b9450908094808210612ee8575b505050612bab906126fc565b91612ef8602092612f77946137b1565b90612f2d826001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683614356565b60405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f157612fb8575b8080612edc565b602090813d8311612fdc575b612fce8183611152565b810103126102fc575f612fb1565b503d612fc4565b6020919450612ffb903d805f833e611f248183611152565b509094919050612e29565b61300f90611106565b5f612d86565b9093506020813d602011613041575b8161303160209383611152565b810103126102fc5751925f612cbc565b3d9150613024565b909261305489611344565b6001600160a01b033091160361306f575b5f612dec94612d88565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016936130a38a611344565b6130ac846142fd565b90863b156102fc576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152306024820152918116604483015285166064820152945f908690608490829084905af19081156102f157612dec955f92613128575b50945050613065565b61313190611106565b5f61311f565b6001600160a01b036020849695940151168a8282145f1461340b5750505061320c61316e5f92846001600160a01b03885116614223565b92906131d48c6001600160a01b03808a5116938951151586146133df576131a361319784611344565b935b60808101906118d9565b929093604051966131b3886110ea565b875216602086015260408501528c6060850152600260808501523691611381565b60a0820152604051809381927f4af29ec4000000000000000000000000000000000000000000000000000000008352600483016138f8565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156102f1575f916133c4575b5060208401518c908a90156133aa5783836001600160a01b03936132836132899461327c8f9c9b9a98996132b29a611691565b5192611691565b52611691565b5191167f000000000000000000000000000000000000000000000000000000000000000061420a565b51156132f457612bab92916001600160a01b036020612ba6930151167f0000000000000000000000000000000000000000000000000000000000000000614341565b516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024810191909152602081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f15761337f575b50612bab906126fc565b602090813d83116133a3575b6133958183611152565b810103126102fc575f613375565b503d61338b565b50509091506133bb92939650611691565b519384916132b2565b6133d891503d805f833e61239c8183611152565b9050613249565b6131a3827f00000000000000000000000000000000000000000000000000000000000000001693613199565b61349e965090613466916060948b61342b608099989993848101906118d9565b9390946040519761343b89611136565b6001895260208901526001600160a01b038b1660408901528888015286015260a08501523691611381565b60c0820152604051809581927f2bfb780c00000000000000000000000000000000000000000000000000000000835260048301613810565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156102f15787918b915f9561352d575b506020015115612bb057612ba69284613505612bab9796946001600160a01b0394611691565b52167f000000000000000000000000000000000000000000000000000000000000000061420a565b602091955061354a9060603d606011611ce057611ccd8183611152565b50959190506134df565b6fffffffffffffffffffffffffffffffff6001600160a01b0360206135858188015161357f886126eb565b90611691565b51015116916129fc565b6135cc856001600160a01b0360208401611c67828251167f00000000000000000000000000000000000000000000000000000000000000006141c0565b6129e0565b50506135fc7f0000000000000000000000000000000000000000000000000000000000000000613a71565b9161360783516119d0565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b86518110156126ba576001906001600160a01b038061366d838b611691565b51165f528560205261368860405f205c8261267e858d611691565b6136928387611691565b5261369d828a611691565b51165f52856020525f604081205d0161364e565b4780156136f0577f00000000000000000000000000000000000000000000000000000000000000005c6136f0576001600160a01b0361184c92166140e0565b5050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102fc570180359067ffffffffffffffff82116102fc57602001918160051b360383136102fc57565b91908110156116a55760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81813603018212156102fc570190565b604051906040820182811067ffffffffffffffff8211176110bd576040525f6020838281520152565b91908203918211611a0e57565b600211156137c857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b908160609103126102fc578051916040602083015192015190565b61010060c0610f7c93602084528051613828816137be565b602085015260208101516001600160a01b0380911660408601528060408301511660608601526060820151166080850152608081015160a085015260a08101518285015201519160e0808201520190610ffb565b90916060828403126102fc5781519167ffffffffffffffff928381116102fc57846138a8918301611573565b9360208201519360408301519081116102fc57610f7c9201611507565b9081518082526020808093019301915f5b8281106138e4575050505090565b8351855293810193928101926001016138d6565b602081526001600160a01b038083511660208301526020830151166040820152613931604083015160c0606084015260e08301906138c5565b9060608301516080820152608083015160058110156137c857610f7c9360a0918284015201519060c0601f1982850301910152610ffb565b916060838303126102fc5782519260208101519267ffffffffffffffff938481116102fc578161399a918401611573565b9360408301519081116102fc57610f7c9201611507565b602081526001600160a01b038083511660208301526020830151166040820152604082015160608201526139f4606083015160c0608084015260e08301906138c5565b90608083015160048110156137c857610f7c9360a0918284015201519060c0601f1982850301910152610ffb565b91909160808060a08301948051613a38816137be565b84526020810151613a48816137be565b60208501526001600160a01b036040820151166040850152606081015160608501520151910152565b90815c613a7d81611175565b613a8a6040519182611152565b818152613a9682611175565b601f196020910136602084013781945f5b848110613ab5575050505050565b600190825f5280845f20015c6001600160a01b03613ad38388611691565b9116905201613aa7565b919280613dd8575b15613c51575050804710613c29576001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691823b156102fc57604051907fd0e30db00000000000000000000000000000000000000000000000000000000082525f915f8160048185895af180156102f157613c12575b506044602092937f00000000000000000000000000000000000000000000000000000000000000001694613b98838783614356565b8460405196879485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af1908115613c065750613bdf5750565b602090813d8311613bff575b613bf58183611152565b810103126102fc57565b503d613beb565b604051903d90823e3d90fd5b60209250613c1f90611106565b60445f9250613b63565b7fa01a9df6000000000000000000000000000000000000000000000000000000005f5260045ffd5b90915f9080613c61575b50505050565b6001600160a01b0393847f00000000000000000000000000000000000000000000000000000000000000001694807f00000000000000000000000000000000000000000000000000000000000000001691613cbb846142fd565b96803b156102fc576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152848316602482015297821660448901529186161660648701525f908690608490829084905af19485156102f157613d8095613dc4575b5082936020936040518097819582947f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03925af1908115613c065750613d99575b808080613c5b565b602090813d8311613dbd575b613daf8183611152565b810103126102fc575f613d91565b503d613da5565b60209350613dd190611106565b5f92613d2f565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614613ae5565b6001810191805f5260209183835260405f205c8015155f14613ea7575f1990818101835c8380820191828403613e6a575b5050505050815c81810192818411611a0e575f93815d835284832001015d5f52525f604081205d600190565b613e77613e87938861443a565b865f52885f2001015c918561443a565b835f52808383885f2001015d5f5285855260405f205d5f80808381613e3e565b50505050505f90565b5f949383156140d857806140a3575b15614007576001600160a01b0391827f000000000000000000000000000000000000000000000000000000000000000016803b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03929092166004830152306024830152604482018590525f908290606490829084905af180156102f157613ff4575b5084827f000000000000000000000000000000000000000000000000000000000000000016803b15613ff05781906024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528960048401525af18015613fe557613fcd575b5061184c939450166140e0565b613fd78691611106565b613fe15784613fc0565b8480fd5b6040513d88823e3d90fd5b5080fd5b613fff919550611106565b5f935f613f53565b929350906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102fc576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af180156102f15761409a5750565b61184c90611106565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690831614613ebf565b505050509050565b814710614130575f8080936001600160a01b038294165af1614100612877565b501561410857565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b90614171575080511561410857805190602001fd5b815115806141b7575b614182575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561417a565b6001810190825f528160205260405f205c155f1461420357805c815f52838160205f20015d60018101809111611a0e57815d5c915f5260205260405f205d600190565b5050505f90565b905f5260205261421f60405f2091825c611a01565b905d565b916044929391936001600160a01b03604094859282808551998a9586947fc9c1661b0000000000000000000000000000000000000000000000000000000086521660048501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9384156142f3575f935f956142bc575b50506142b96142b285946119d0565b9485611691565b52565b809295508194503d83116142ec575b6142d58183611152565b810103126102fc5760208251920151925f806142a3565b503d6142cb565b83513d5f823e3d90fd5b6001600160a01b0390818111614311571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b905f5260205261421f60405f2091825c6137b1565b6040519260208401907fa9059cbb0000000000000000000000000000000000000000000000000000000082526001600160a01b038094166024860152604485015260448452608084019084821067ffffffffffffffff8311176110bd576143d5935f9384936040521694519082865af16143ce612877565b908361415c565b8051908115159182614416575b50506143eb5750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81925090602091810103126102fc57602001518015908115036102fc575f806143e2565b5c111561444357565b7f0f4ae0e4000000000000000000000000000000000000000000000000000000005f5260045ffdfea2646970667358221220229a5cf89aa7c2d0a4b4d5db20bba6c2b3a74b080303fc6ec00ba582a5dcf75164736f6c634300081a0033",
- "linkReferences": {},
- "deployedLinkReferences": {}
+ ]
}
diff --git a/contracts/artifacts/Balances.json b/contracts/artifacts/Balances.json
new file mode 100644
index 0000000000..08238348aa
--- /dev/null
+++ b/contracts/artifacts/Balances.json
@@ -0,0 +1,110 @@
+{
+ "abi": [
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "contract ISettlement",
+ "name": "settlement",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IVaultRelayer",
+ "name": "vaultRelayer",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IVault",
+ "name": "vault",
+ "type": "address"
+ }
+ ],
+ "internalType": "struct Balances.Contracts",
+ "name": "contracts",
+ "type": "tuple"
+ },
+ {
+ "internalType": "address",
+ "name": "trader",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "source",
+ "type": "bytes32"
+ },
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Interaction[]",
+ "name": "interactions",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "balance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenBalance",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "allowance",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "effectiveBalance",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "canTransfer",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes",
+ "name": "transferRevertReason",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x6080604052348015600e575f5ffd5b50610ef28061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063f88cf6db1461002d575b5f5ffd5b61004061003b366004610abe565b61005a565b604051610051959493929190610b83565b60405180910390f35b5f5f5f5f606061006b8c88886107b0565b7f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc988036101c6576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301528b16906370a0823190602401602060405180830381865afa1580156100fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101209190610c0a565b60208d01516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e8116600483015291821660248201529196508b169063dd62ed3e906044015b602060405180830381865afa15801561019b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101bf9190610c0a565b9350610604565b7fabee3b73373acd583a130924aad6dc38cfdc44ba0555ba94ce2ff63980ea06328803610389576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301528b16906370a0823190602401602060405180830381865afa158015610257573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027b9190610c0a565b6040808e015160208f015191517ffec90d7200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301529283166024820152929750169063fec90d7290604401602060405180830381865afa1580156102f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031d9190610c21565b610327575f6101bf565b60408c81015190517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d811660048301529182166024820152908b169063dd62ed3e90604401610180565b7f4ac99ace14ee0a5ef932dc609df0943ab7ac16b7583634612f8dc35a4289a6ce880361059d576040805160018082528183019092525f91602080830190803683370190505090508a815f815181106103e4576103e4610c47565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040808f015190517f0f5a6efa000000000000000000000000000000000000000000000000000000008152911690630f5a6efa9061044b908f908590600401610c74565b5f60405180830381865afa158015610465573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104aa9190810190610ced565b5f815181106104bb576104bb610c47565b602002602001015195508c6040015173ffffffffffffffffffffffffffffffffffffffff1663fec90d728d8f602001516040518363ffffffff1660e01b815260040161052a92919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b602060405180830381865afa158015610545573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105699190610c21565b610573575f610595565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b945050610604565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c696420746f6b656e20736f7572636500000000000000000000000060448201526064015b60405180910390fd5b838511156106125783610614565b845b6040805160018082528183019092529194505f9190816020015b604080516080810182525f8082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161062e57905050905060405180608001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b5f036106d157856106d3565b8b5b81526020018a815250815f815181106106ee576106ee610c47565b60200260200101819052508c6020015173ffffffffffffffffffffffffffffffffffffffff16637d10d11f826040518263ffffffff1660e01b81526004016107369190610d99565b5f604051808303815f87803b15801561074d575f5ffd5b505af192505050801561075e575060015b61079b573d80801561078b576040519150601f19603f3d011682016040523d82523d5f602084013e610790565b606091505b505f935091506107a0565b600192505b5097509750975097509792505050565b825173ffffffffffffffffffffffffffffffffffffffff163014610830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696e636f72726563742063616c6c696e6720636f6e746578740000000000000060448201526064016105fb565b5f5b81811015610997575f83838381811061084d5761084d610c47565b905060200281019061085f9190610e2d565b61086d906020810190610e69565b90505f84848481811061088257610882610c47565b90506020028101906108949190610e2d565b602001359050365f8686868181106108ae576108ae610c47565b90506020028101906108c09190610e2d565b6108ce906040810190610e84565b91509150876020015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f475076323a20666f7262696464656e20696e746572616374696f6e000000000060448201526064016105fb565b604051818382375f5f838387895af1610986573d5f5f3e3d5ffd5b505060019093019250610832915050565b50505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156109ed576109ed61099d565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610a3a57610a3a61099d565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610a63575f5ffd5b50565b8035610a7181610a42565b919050565b5f5f83601f840112610a86575f5ffd5b50813567ffffffffffffffff811115610a9d575f5ffd5b6020830191508360208260051b8501011115610ab7575f5ffd5b9250929050565b5f5f5f5f5f5f5f878903610100811215610ad6575f5ffd5b6060811215610ae3575f5ffd5b50610aec6109ca565b8835610af781610a42565b81526020890135610b0781610a42565b60208201526040890135610b1a81610a42565b60408201529650610b2d60608901610a66565b9550610b3b60808901610a66565b945060a0880135935060c0880135925060e088013567ffffffffffffffff811115610b64575f5ffd5b610b708a828b01610a76565b989b979a50959850939692959293505050565b858152846020820152836040820152821515606082015260a060808201525f82518060a08401525f5b81811015610bc957602081860181015160c0868401015201610bac565b505f60c0828501015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150509695505050505050565b5f60208284031215610c1a575f5ffd5b5051919050565b5f60208284031215610c31575f5ffd5b81518015158114610c40575f5ffd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6040820173ffffffffffffffffffffffffffffffffffffffff85168352604060208401528084518083526060850191506020860192505f5b81811015610ce157835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101610cad565b50909695505050505050565b5f60208284031215610cfd575f5ffd5b815167ffffffffffffffff811115610d13575f5ffd5b8201601f81018413610d23575f5ffd5b805167ffffffffffffffff811115610d3d57610d3d61099d565b8060051b610d4d602082016109f3565b91825260208184018101929081019087841115610d68575f5ffd5b6020850194505b83851015610d8e57845180835260209586019590935090910190610d6f565b979650505050505050565b602080825282518282018190525f918401906040840190835b81811015610e2257835173ffffffffffffffffffffffffffffffffffffffff815116845273ffffffffffffffffffffffffffffffffffffffff6020820151166020850152604081015160408501526060810151606085015250608083019250602084019350600181019050610db2565b509095945050505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610e5f575f5ffd5b9190910192915050565b5f60208284031215610e79575f5ffd5b8135610c4081610a42565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610eb7575f5ffd5b83018035915067ffffffffffffffff821115610ed1575f5ffd5b602001915036819003821315610ab7575f5ffdfea164736f6c634300081e000a",
+ "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063f88cf6db1461002d575b5f5ffd5b61004061003b366004610abe565b61005a565b604051610051959493929190610b83565b60405180910390f35b5f5f5f5f606061006b8c88886107b0565b7f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc988036101c6576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301528b16906370a0823190602401602060405180830381865afa1580156100fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101209190610c0a565b60208d01516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e8116600483015291821660248201529196508b169063dd62ed3e906044015b602060405180830381865afa15801561019b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101bf9190610c0a565b9350610604565b7fabee3b73373acd583a130924aad6dc38cfdc44ba0555ba94ce2ff63980ea06328803610389576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301528b16906370a0823190602401602060405180830381865afa158015610257573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027b9190610c0a565b6040808e015160208f015191517ffec90d7200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301529283166024820152929750169063fec90d7290604401602060405180830381865afa1580156102f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031d9190610c21565b610327575f6101bf565b60408c81015190517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d811660048301529182166024820152908b169063dd62ed3e90604401610180565b7f4ac99ace14ee0a5ef932dc609df0943ab7ac16b7583634612f8dc35a4289a6ce880361059d576040805160018082528183019092525f91602080830190803683370190505090508a815f815181106103e4576103e4610c47565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040808f015190517f0f5a6efa000000000000000000000000000000000000000000000000000000008152911690630f5a6efa9061044b908f908590600401610c74565b5f60405180830381865afa158015610465573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104aa9190810190610ced565b5f815181106104bb576104bb610c47565b602002602001015195508c6040015173ffffffffffffffffffffffffffffffffffffffff1663fec90d728d8f602001516040518363ffffffff1660e01b815260040161052a92919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b602060405180830381865afa158015610545573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105699190610c21565b610573575f610595565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b945050610604565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c696420746f6b656e20736f7572636500000000000000000000000060448201526064015b60405180910390fd5b838511156106125783610614565b845b6040805160018082528183019092529194505f9190816020015b604080516080810182525f8082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161062e57905050905060405180608001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b5f036106d157856106d3565b8b5b81526020018a815250815f815181106106ee576106ee610c47565b60200260200101819052508c6020015173ffffffffffffffffffffffffffffffffffffffff16637d10d11f826040518263ffffffff1660e01b81526004016107369190610d99565b5f604051808303815f87803b15801561074d575f5ffd5b505af192505050801561075e575060015b61079b573d80801561078b576040519150601f19603f3d011682016040523d82523d5f602084013e610790565b606091505b505f935091506107a0565b600192505b5097509750975097509792505050565b825173ffffffffffffffffffffffffffffffffffffffff163014610830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696e636f72726563742063616c6c696e6720636f6e746578740000000000000060448201526064016105fb565b5f5b81811015610997575f83838381811061084d5761084d610c47565b905060200281019061085f9190610e2d565b61086d906020810190610e69565b90505f84848481811061088257610882610c47565b90506020028101906108949190610e2d565b602001359050365f8686868181106108ae576108ae610c47565b90506020028101906108c09190610e2d565b6108ce906040810190610e84565b91509150876020015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f475076323a20666f7262696464656e20696e746572616374696f6e000000000060448201526064016105fb565b604051818382375f5f838387895af1610986573d5f5f3e3d5ffd5b505060019093019250610832915050565b50505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff811182821017156109ed576109ed61099d565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610a3a57610a3a61099d565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610a63575f5ffd5b50565b8035610a7181610a42565b919050565b5f5f83601f840112610a86575f5ffd5b50813567ffffffffffffffff811115610a9d575f5ffd5b6020830191508360208260051b8501011115610ab7575f5ffd5b9250929050565b5f5f5f5f5f5f5f878903610100811215610ad6575f5ffd5b6060811215610ae3575f5ffd5b50610aec6109ca565b8835610af781610a42565b81526020890135610b0781610a42565b60208201526040890135610b1a81610a42565b60408201529650610b2d60608901610a66565b9550610b3b60808901610a66565b945060a0880135935060c0880135925060e088013567ffffffffffffffff811115610b64575f5ffd5b610b708a828b01610a76565b989b979a50959850939692959293505050565b858152846020820152836040820152821515606082015260a060808201525f82518060a08401525f5b81811015610bc957602081860181015160c0868401015201610bac565b505f60c0828501015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150509695505050505050565b5f60208284031215610c1a575f5ffd5b5051919050565b5f60208284031215610c31575f5ffd5b81518015158114610c40575f5ffd5b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6040820173ffffffffffffffffffffffffffffffffffffffff85168352604060208401528084518083526060850191506020860192505f5b81811015610ce157835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101610cad565b50909695505050505050565b5f60208284031215610cfd575f5ffd5b815167ffffffffffffffff811115610d13575f5ffd5b8201601f81018413610d23575f5ffd5b805167ffffffffffffffff811115610d3d57610d3d61099d565b8060051b610d4d602082016109f3565b91825260208184018101929081019087841115610d68575f5ffd5b6020850194505b83851015610d8e57845180835260209586019590935090910190610d6f565b979650505050505050565b602080825282518282018190525f918401906040840190835b81811015610e2257835173ffffffffffffffffffffffffffffffffffffffff815116845273ffffffffffffffffffffffffffffffffffffffff6020820151166020850152604081015160408501526060810151606085015250608083019250602084019350600181019050610db2565b509095945050505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610e5f575f5ffd5b9190910192915050565b5f60208284031215610e79575f5ffd5b8135610c4081610a42565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610eb7575f5ffd5b83018035915067ffffffffffffffff821115610ed1575f5ffd5b602001915036819003821315610ab7575f5ffdfea164736f6c634300081e000a",
+ "devdoc": {
+ "methods": {}
+ },
+ "userdoc": {
+ "methods": {}
+ }
+}
diff --git a/contracts/artifacts/BaoswapRouter.json b/contracts/artifacts/BaoswapRouter.json
new file mode 100644
index 0000000000..c95b7fd70d
--- /dev/null
+++ b/contracts/artifacts/BaoswapRouter.json
@@ -0,0 +1,957 @@
+{
+ "abi": [
+ {
+ "inputs": [],
+ "name": "WETH",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountADesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBDesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "addLiquidity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "factory",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveB",
+ "type": "uint256"
+ }
+ ],
+ "name": "quote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenDesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "addLiquidityETH",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveOut",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAmountIn",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveOut",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAmountOut",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ }
+ ],
+ "name": "getAmountsIn",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ }
+ ],
+ "name": "getAmountsOut",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidityETH",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidityETHSupportingFeeOnTransferTokens",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityETHWithPermit",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityWithPermit",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapETHForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactETHForTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactETHForTokensSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForETH",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForETHSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactETH",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ]
+}
diff --git a/crates/contracts/artifacts/ChainalysisOracle.json b/contracts/artifacts/ChainalysisOracle.json
similarity index 99%
rename from crates/contracts/artifacts/ChainalysisOracle.json
rename to contracts/artifacts/ChainalysisOracle.json
index 7b7318b2b8..066ba42f7a 100644
--- a/crates/contracts/artifacts/ChainalysisOracle.json
+++ b/contracts/artifacts/ChainalysisOracle.json
@@ -76,19 +76,6 @@
"name": "SanctionedAddressesRemoved",
"type": "event"
},
- {
- "inputs": [
- {
- "internalType": "address[]",
- "name": "newSanctions",
- "type": "address[]"
- }
- ],
- "name": "addToSanctionsList",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -108,25 +95,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "addr",
- "type": "address"
- }
- ],
- "name": "isSanctionedVerbose",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [],
"name": "name",
@@ -152,6 +120,40 @@
],
"stateMutability": "view",
"type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "newSanctions",
+ "type": "address[]"
+ }
+ ],
+ "name": "addToSanctionsList",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ }
+ ],
+ "name": "isSanctionedVerbose",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
},
{
"inputs": [
diff --git a/crates/contracts/artifacts/CoWSwapEthFlow.json b/contracts/artifacts/CoWSwapEthFlow.json
similarity index 99%
rename from crates/contracts/artifacts/CoWSwapEthFlow.json
rename to contracts/artifacts/CoWSwapEthFlow.json
index d2ed8570c9..e4fcf8356f 100644
--- a/crates/contracts/artifacts/CoWSwapEthFlow.json
+++ b/contracts/artifacts/CoWSwapEthFlow.json
@@ -201,17 +201,8 @@
"type": "event"
},
{
- "inputs": [],
- "name": "cowSwapSettlement",
- "outputs": [
- {
- "internalType": "contract ICoWSwapSettlement",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
+ "stateMutability": "payable",
+ "type": "receive"
},
{
"inputs": [
@@ -472,6 +463,22 @@
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
+ }
+ ],
+ "bytecode": "0x60e06040523480156200001157600080fd5b5060405162001b2a38038062001b2a83398101604081905262000034916200021e565b816200004b816200015260201b6200089b1760201c565b608052506001600160a01b0380831660a081905290821660c081905260408051634daa966160e11b81529051919263095ea7b3929091639b552cc291600480830192602092919082900301816000875af1158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d491906200025d565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260001960248201526044016020604051808303816000875af115801562000123573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000149919062000284565b505050620002a8565b604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f6c85c0337eba1661327f94f3bf46c8a7f9311a563f4d5c948362567f5d8ed60c918101919091527ff9446b8e937d86f0bc87cac73923491692b123ca5f8761908494703758206adf606082015246608082018190526001600160a01b03831660a083015260009160c00160405160208183030381529060405280519060200120915050919050565b6001600160a01b03811681146200021b57600080fd5b50565b600080604083850312156200023257600080fd5b82516200023f8162000205565b6020840151909250620002528162000205565b809150509250929050565b6000602082840312156200027057600080fd5b81516200027d8162000205565b9392505050565b6000602082840312156200029757600080fd5b815180151581146200027d57600080fd5b60805160a05160c0516118216200030960003960008181610129015281816105ff015281816107ad0152818161082501528181610c3301526110310152600081816102ce0152610f4b015260008181610bf70152610cd901526118216000f3fe6080604052600436106100b55760003560e01c80637bc41b9611610069578063de0e9a3e1161004e578063de0e9a3e1461027c578063ea598cb01461029c578063ec30bb88146102bc57600080fd5b80637bc41b96146101c85780639c3f1e90146101e857600080fd5b8063322bba211161009a578063322bba21146101705780634c84c1c8146101915780634cb76498146101a857600080fd5b80631626ba7e146100c157806317fcb39b1461011757600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc36600461126e565b6102f0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b34801561012357600080fd5b5061014b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010e565b61018361017e36600461132b565b6103de565b60405190815260200161010e565b34801561019d57600080fd5b506101a6610720565b005b3480156101b457600080fd5b506101a66101c3366004611344565b61072b565b3480156101d457600080fd5b506101a66101e336600461132b565b610770565b3480156101f457600080fd5b5061024b6102033660046113ba565b60006020819052908152604090205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835263ffffffff90911660208301520161010e565b34801561028857600080fd5b506101a66102973660046113ba565b61077e565b3480156102a857600080fd5b506101a66102b73660046113ba565b610821565b3480156102c857600080fd5b5061014b7f000000000000000000000000000000000000000000000000000000000000000081565b60008281526020818152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910463ffffffff1692820192909252901580159061036f5750805173ffffffffffffffffffffffffffffffffffffffff90811614155b8015610385575042816020015163ffffffff1610155b156103b357507f1626ba7e0000000000000000000000000000000000000000000000000000000090506103d8565b507fffffffff0000000000000000000000000000000000000000000000000000000090505b92915050565b60006103f260a08301356040840135611402565b341461042a576040517f8b6ebb4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160400135600003610468576040517feaec5c9d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4261047960e0840160c0850161142e565b63ffffffff1610156104b7576040517f89bb260100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152338152600090602081016104db60e0860160c0870161142e565b63ffffffff169052604080518082019091529091506000908082815260200130604051602001610536919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290529050600061057c61012086016101008701611462565b6020808501516040516105c393920160c09290921b825260e01b7fffffffff00000000000000000000000000000000000000000000000000000000166008820152600c0190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052835190915061063a906106337f000000000000000000000000000000000000000000000000000000000000000061062d368a90038a018a6114b1565b9061095b565b8484610b2a565b60008181526020819052604090205490945073ffffffffffffffffffffffffffffffffffffffff16156106a1576040517f56a1d2b2000000000000000000000000000000000000000000000000000000008152600481018590526024015b60405180910390fd5b505060008281526020818152604090912082518154929093015163ffffffff1674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090921673ffffffffffffffffffffffffffffffffffffffff90931692909217179055919050565b61072947610821565b565b60005b8181101561076b5761075983838381811061074b5761074b61154b565b905061012002016000610c2c565b806107638161157a565b91505061072e565b505050565b61077b816001610c2c565b50565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561080657600080fd5b505af115801561081a573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461081a576040519150601f19603f3d011682016040523d82523d6000602084013e61081a565b604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f6c85c0337eba1661327f94f3bf46c8a7f9311a563f4d5c948362567f5d8ed60c918101919091527ff9446b8e937d86f0bc87cac73923491692b123ca5f8761908494703758206adf6060820152466080820181905273ffffffffffffffffffffffffffffffffffffffff831660a083015260009160c00160405160208183030381529060405280519060200120915050919050565b604080516101808101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101608201529083015173ffffffffffffffffffffffffffffffffffffffff16610a0a576040517fefc9ccdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518061018001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015173ffffffffffffffffffffffffffffffffffffffff168152602001846040015181526020018460600151815260200163ffffffff80168152602001846080015181526020018460a0015181526020017ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677581526020018460e00151151581526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc981526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9815250905092915050565b60008473ffffffffffffffffffffffffffffffffffffffff167fcf5f9de2984132265203b5c335b25727702ca77262ff622e136baa7362bf1da9858585604051610b7693929190611676565b60405180910390a25050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a0822091526040517f190100000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006002820152602281019190915260429020919050565b6000610c617f000000000000000000000000000000000000000000000000000000000000000061062d368690038601866114b1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a082209152604080517f190100000000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600282015260228101929092526042909120600081815260208181529083902083518085019094525473ffffffffffffffffffffffffffffffffffffffff8082168086527401000000000000000000000000000000000000000090920463ffffffff1692850183905294955091934290911015911480610d8d5750815173ffffffffffffffffffffffffffffffffffffffff16155b80610db75750808015610db75750815173ffffffffffffffffffffffffffffffffffffffff163314155b15610dff578415610df7576040517ff8cc70ce00000000000000000000000000000000000000000000000000000000815260048101849052602401610698565b505050505050565b60008381526020818152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff1790558051603880825260608201909252918201818036833750505060a0860151909150610e7a90829086903090611149565b8115610ebc577fb8bad102ac8bbacfef31ff1c906ec6d951c230b4dce750bb0376b812ad35852a81604051610eaf9190611790565b60405180910390a1610f0b565b3373ffffffffffffffffffffffffffffffffffffffff167f195271068a288191e4b265c641a56b9832919f69e9e7d6c2f31ba40278aeb85a82604051610f029190611790565b60405180910390a25b6040517f2479fb6e00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632479fb6e90610f80908590600401611790565b6020604051808303816000875af1158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc391906117a3565b90506000808760600151838960e001510281610fe157610fe16117bc565b048860e00151039050808389606001510301915050804710156110a4576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815247820360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b50505050505b845160405160009173ffffffffffffffffffffffffffffffffffffffff169083908381818185875af1925050503d80600081146110fd576040519150601f19603f3d011682016040523d82523d6000602084013e611102565b606091505b505090508061113d576040517f6d963f8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b60388451146111b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a2075696420627566666572206f766572666c6f77000000000000006044820152606401610698565b60388401526034830152602090910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715611219576112196111c6565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611266576112666111c6565b604052919050565b6000806040838503121561128157600080fd5b8235915060208084013567ffffffffffffffff808211156112a157600080fd5b818601915086601f8301126112b557600080fd5b8135818111156112c7576112c76111c6565b6112f7847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161121f565b9150808252878482850101111561130d57600080fd5b80848401858401376000848284010152508093505050509250929050565b6000610120828403121561133e57600080fd5b50919050565b6000806020838503121561135757600080fd5b823567ffffffffffffffff8082111561136f57600080fd5b818501915085601f83011261138357600080fd5b81358181111561139257600080fd5b866020610120830285010111156113a857600080fd5b60209290920196919550909350505050565b6000602082840312156113cc57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103d8576103d86113d3565b803563ffffffff8116811461142957600080fd5b919050565b60006020828403121561144057600080fd5b61144982611415565b9392505050565b8035600781900b811461142957600080fd5b60006020828403121561147457600080fd5b61144982611450565b803573ffffffffffffffffffffffffffffffffffffffff8116811461142957600080fd5b8035801515811461142957600080fd5b600061012082840312156114c457600080fd5b6114cc6111f5565b6114d58361147d565b81526114e36020840161147d565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015261151c60c08401611415565b60c082015261152d60e084016114a1565b60e0820152610100611540818501611450565b908201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036115ab576115ab6113d3565b5060010190565b6000815180845260005b818110156115d8576020818501810151868301820152016115bc565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6000815160028110611651577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8084525060208201516040602085015261166e60408501826115b2565b949350505050565b835173ffffffffffffffffffffffffffffffffffffffff16815260006101c060208601516116bc602085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408601516116e4604085018273ffffffffffffffffffffffffffffffffffffffff169052565b50606086015160608401526080860151608084015260a086015161171060a085018263ffffffff169052565b5060c086015160c084015260e086015160e0840152610100808701518185015250610120808701516117458286018215159052565b505061014086810151908401526101608087015190840152610180830181905261177181840186611616565b90508281036101a084015261178681856115b2565b9695505050505050565b60208152600061144960208301846115b2565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea2646970667358221220d3219a243fb3b7683c6c6a0918144885c8551f0fd87b19a0e7355ed3d10e937064736f6c63430008100033",
+ "_disabled": [
+ {
+ "inputs": [],
+ "name": "cowSwapSettlement",
+ "outputs": [
+ {
+ "internalType": "contract ICoWSwapSettlement",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
},
{
"inputs": [],
@@ -492,11 +499,6 @@
],
"stateMutability": "view",
"type": "function"
- },
- {
- "stateMutability": "payable",
- "type": "receive"
}
- ],
- "bytecode": "0x60e06040523480156200001157600080fd5b5060405162001b2a38038062001b2a83398101604081905262000034916200021e565b816200004b816200015260201b6200089b1760201c565b608052506001600160a01b0380831660a081905290821660c081905260408051634daa966160e11b81529051919263095ea7b3929091639b552cc291600480830192602092919082900301816000875af1158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d491906200025d565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260001960248201526044016020604051808303816000875af115801562000123573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000149919062000284565b505050620002a8565b604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f6c85c0337eba1661327f94f3bf46c8a7f9311a563f4d5c948362567f5d8ed60c918101919091527ff9446b8e937d86f0bc87cac73923491692b123ca5f8761908494703758206adf606082015246608082018190526001600160a01b03831660a083015260009160c00160405160208183030381529060405280519060200120915050919050565b6001600160a01b03811681146200021b57600080fd5b50565b600080604083850312156200023257600080fd5b82516200023f8162000205565b6020840151909250620002528162000205565b809150509250929050565b6000602082840312156200027057600080fd5b81516200027d8162000205565b9392505050565b6000602082840312156200029757600080fd5b815180151581146200027d57600080fd5b60805160a05160c0516118216200030960003960008181610129015281816105ff015281816107ad0152818161082501528181610c3301526110310152600081816102ce0152610f4b015260008181610bf70152610cd901526118216000f3fe6080604052600436106100b55760003560e01c80637bc41b9611610069578063de0e9a3e1161004e578063de0e9a3e1461027c578063ea598cb01461029c578063ec30bb88146102bc57600080fd5b80637bc41b96146101c85780639c3f1e90146101e857600080fd5b8063322bba211161009a578063322bba21146101705780634c84c1c8146101915780634cb76498146101a857600080fd5b80631626ba7e146100c157806317fcb39b1461011757600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc36600461126e565b6102f0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b34801561012357600080fd5b5061014b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010e565b61018361017e36600461132b565b6103de565b60405190815260200161010e565b34801561019d57600080fd5b506101a6610720565b005b3480156101b457600080fd5b506101a66101c3366004611344565b61072b565b3480156101d457600080fd5b506101a66101e336600461132b565b610770565b3480156101f457600080fd5b5061024b6102033660046113ba565b60006020819052908152604090205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835263ffffffff90911660208301520161010e565b34801561028857600080fd5b506101a66102973660046113ba565b61077e565b3480156102a857600080fd5b506101a66102b73660046113ba565b610821565b3480156102c857600080fd5b5061014b7f000000000000000000000000000000000000000000000000000000000000000081565b60008281526020818152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910463ffffffff1692820192909252901580159061036f5750805173ffffffffffffffffffffffffffffffffffffffff90811614155b8015610385575042816020015163ffffffff1610155b156103b357507f1626ba7e0000000000000000000000000000000000000000000000000000000090506103d8565b507fffffffff0000000000000000000000000000000000000000000000000000000090505b92915050565b60006103f260a08301356040840135611402565b341461042a576040517f8b6ebb4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160400135600003610468576040517feaec5c9d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4261047960e0840160c0850161142e565b63ffffffff1610156104b7576040517f89bb260100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152338152600090602081016104db60e0860160c0870161142e565b63ffffffff169052604080518082019091529091506000908082815260200130604051602001610536919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290529050600061057c61012086016101008701611462565b6020808501516040516105c393920160c09290921b825260e01b7fffffffff00000000000000000000000000000000000000000000000000000000166008820152600c0190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052835190915061063a906106337f000000000000000000000000000000000000000000000000000000000000000061062d368a90038a018a6114b1565b9061095b565b8484610b2a565b60008181526020819052604090205490945073ffffffffffffffffffffffffffffffffffffffff16156106a1576040517f56a1d2b2000000000000000000000000000000000000000000000000000000008152600481018590526024015b60405180910390fd5b505060008281526020818152604090912082518154929093015163ffffffff1674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090921673ffffffffffffffffffffffffffffffffffffffff90931692909217179055919050565b61072947610821565b565b60005b8181101561076b5761075983838381811061074b5761074b61154b565b905061012002016000610c2c565b806107638161157a565b91505061072e565b505050565b61077b816001610c2c565b50565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561080657600080fd5b505af115801561081a573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461081a576040519150601f19603f3d011682016040523d82523d6000602084013e61081a565b604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f6c85c0337eba1661327f94f3bf46c8a7f9311a563f4d5c948362567f5d8ed60c918101919091527ff9446b8e937d86f0bc87cac73923491692b123ca5f8761908494703758206adf6060820152466080820181905273ffffffffffffffffffffffffffffffffffffffff831660a083015260009160c00160405160208183030381529060405280519060200120915050919050565b604080516101808101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101608201529083015173ffffffffffffffffffffffffffffffffffffffff16610a0a576040517fefc9ccdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518061018001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015173ffffffffffffffffffffffffffffffffffffffff168152602001846040015181526020018460600151815260200163ffffffff80168152602001846080015181526020018460a0015181526020017ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677581526020018460e00151151581526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc981526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9815250905092915050565b60008473ffffffffffffffffffffffffffffffffffffffff167fcf5f9de2984132265203b5c335b25727702ca77262ff622e136baa7362bf1da9858585604051610b7693929190611676565b60405180910390a25050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a0822091526040517f190100000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006002820152602281019190915260429020919050565b6000610c617f000000000000000000000000000000000000000000000000000000000000000061062d368690038601866114b1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a082209152604080517f190100000000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600282015260228101929092526042909120600081815260208181529083902083518085019094525473ffffffffffffffffffffffffffffffffffffffff8082168086527401000000000000000000000000000000000000000090920463ffffffff1692850183905294955091934290911015911480610d8d5750815173ffffffffffffffffffffffffffffffffffffffff16155b80610db75750808015610db75750815173ffffffffffffffffffffffffffffffffffffffff163314155b15610dff578415610df7576040517ff8cc70ce00000000000000000000000000000000000000000000000000000000815260048101849052602401610698565b505050505050565b60008381526020818152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff1790558051603880825260608201909252918201818036833750505060a0860151909150610e7a90829086903090611149565b8115610ebc577fb8bad102ac8bbacfef31ff1c906ec6d951c230b4dce750bb0376b812ad35852a81604051610eaf9190611790565b60405180910390a1610f0b565b3373ffffffffffffffffffffffffffffffffffffffff167f195271068a288191e4b265c641a56b9832919f69e9e7d6c2f31ba40278aeb85a82604051610f029190611790565b60405180910390a25b6040517f2479fb6e00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632479fb6e90610f80908590600401611790565b6020604051808303816000875af1158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc391906117a3565b90506000808760600151838960e001510281610fe157610fe16117bc565b048860e00151039050808389606001510301915050804710156110a4576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815247820360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b50505050505b845160405160009173ffffffffffffffffffffffffffffffffffffffff169083908381818185875af1925050503d80600081146110fd576040519150601f19603f3d011682016040523d82523d6000602084013e611102565b606091505b505090508061113d576040517f6d963f8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b60388451146111b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a2075696420627566666572206f766572666c6f77000000000000006044820152606401610698565b60388401526034830152602090910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610120810167ffffffffffffffff81118282101715611219576112196111c6565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611266576112666111c6565b604052919050565b6000806040838503121561128157600080fd5b8235915060208084013567ffffffffffffffff808211156112a157600080fd5b818601915086601f8301126112b557600080fd5b8135818111156112c7576112c76111c6565b6112f7847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161121f565b9150808252878482850101111561130d57600080fd5b80848401858401376000848284010152508093505050509250929050565b6000610120828403121561133e57600080fd5b50919050565b6000806020838503121561135757600080fd5b823567ffffffffffffffff8082111561136f57600080fd5b818501915085601f83011261138357600080fd5b81358181111561139257600080fd5b866020610120830285010111156113a857600080fd5b60209290920196919550909350505050565b6000602082840312156113cc57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103d8576103d86113d3565b803563ffffffff8116811461142957600080fd5b919050565b60006020828403121561144057600080fd5b61144982611415565b9392505050565b8035600781900b811461142957600080fd5b60006020828403121561147457600080fd5b61144982611450565b803573ffffffffffffffffffffffffffffffffffffffff8116811461142957600080fd5b8035801515811461142957600080fd5b600061012082840312156114c457600080fd5b6114cc6111f5565b6114d58361147d565b81526114e36020840161147d565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015261151c60c08401611415565b60c082015261152d60e084016114a1565b60e0820152610100611540818501611450565b908201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036115ab576115ab6113d3565b5060010190565b6000815180845260005b818110156115d8576020818501810151868301820152016115bc565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6000815160028110611651577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8084525060208201516040602085015261166e60408501826115b2565b949350505050565b835173ffffffffffffffffffffffffffffffffffffffff16815260006101c060208601516116bc602085018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408601516116e4604085018273ffffffffffffffffffffffffffffffffffffffff169052565b50606086015160608401526080860151608084015260a086015161171060a085018263ffffffff169052565b5060c086015160c084015260e086015160e0840152610100808701518185015250610120808701516117458286018215159052565b505061014086810151908401526101608087015190840152610180830181905261177181840186611616565b90508281036101a084015261178681856115b2565b9695505050505050565b60208152600061144960208301846115b2565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea2646970667358221220d3219a243fb3b7683c6c6a0918144885c8551f0fd87b19a0e7355ed3d10e937064736f6c63430008100033"
-}
\ No newline at end of file
+ ]
+}
diff --git a/crates/contracts/artifacts/CoWSwapOnchainOrders.json b/contracts/artifacts/CoWSwapOnchainOrders.json
similarity index 100%
rename from crates/contracts/artifacts/CoWSwapOnchainOrders.json
rename to contracts/artifacts/CoWSwapOnchainOrders.json
diff --git a/crates/contracts/artifacts/Counter.json b/contracts/artifacts/Counter.json
similarity index 100%
rename from crates/contracts/artifacts/Counter.json
rename to contracts/artifacts/Counter.json
diff --git a/crates/contracts/artifacts/CowAmm.json b/contracts/artifacts/CowAmm.json
similarity index 99%
rename from crates/contracts/artifacts/CowAmm.json
rename to contracts/artifacts/CowAmm.json
index 2f9b322da2..eed411938a 100644
--- a/crates/contracts/artifacts/CowAmm.json
+++ b/contracts/artifacts/CowAmm.json
@@ -22,97 +22,25 @@
"stateMutability": "nonpayable"
},
{
- "type": "function",
- "name": "COMMITMENT_SLOT",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "EMPTY_COMMITMENT",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "MAX_ORDER_DURATION",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "uint32",
- "internalType": "uint32"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "NO_TRADING",
+ "type": "event",
+ "name": "TradingDisabled",
"inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
+ "anonymous": false
},
{
- "type": "function",
- "name": "commit",
+ "type": "event",
+ "name": "TradingEnabled",
"inputs": [
{
- "name": "orderHash",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "function",
- "name": "commitment",
- "inputs": [],
- "outputs": [
- {
- "name": "value",
+ "name": "hash",
"type": "bytes32",
+ "indexed": true,
"internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "disableTrading",
- "inputs": [],
- "outputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "function",
- "name": "enableTrading",
- "inputs": [
+ },
{
- "name": "tradingParams",
+ "name": "params",
"type": "tuple",
+ "indexed": false,
"internalType": "struct ConstantProduct.TradingParams",
"components": [
{
@@ -138,111 +66,77 @@
]
}
],
- "outputs": [],
- "stateMutability": "nonpayable"
+ "anonymous": false
},
{
- "type": "function",
- "name": "getTradeableOrder",
+ "type": "error",
+ "name": "CommitOutsideOfSettlement",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "OnlyManagerCanCall",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "OrderDoesNotMatchCommitmentHash",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "OrderDoesNotMatchDefaultTradeableOrder",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "OrderDoesNotMatchMessageHash",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "OrderNotValid",
"inputs": [
{
- "name": "tradingParams",
- "type": "tuple",
- "internalType": "struct ConstantProduct.TradingParams",
- "components": [
- {
- "name": "minTradedToken0",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "priceOracle",
- "type": "address",
- "internalType": "contract IPriceOracle"
- },
- {
- "name": "priceOracleData",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "appData",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ]
+ "name": "",
+ "type": "string",
+ "internalType": "string"
}
- ],
- "outputs": [
+ ]
+ },
+ {
+ "type": "error",
+ "name": "PollTryAtBlock",
+ "inputs": [
{
- "name": "order",
- "type": "tuple",
- "internalType": "struct GPv2Order.Data",
- "components": [
- {
- "name": "sellToken",
- "type": "address",
- "internalType": "contract IERC20"
- },
- {
- "name": "buyToken",
- "type": "address",
- "internalType": "contract IERC20"
- },
- {
- "name": "receiver",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "sellAmount",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "buyAmount",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "validTo",
- "type": "uint32",
- "internalType": "uint32"
- },
- {
- "name": "appData",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "feeAmount",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "kind",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "partiallyFillable",
- "type": "bool",
- "internalType": "bool"
- },
- {
- "name": "sellTokenBalance",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "buyTokenBalance",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ]
+ "name": "blockNumber",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "message",
+ "type": "string",
+ "internalType": "string"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "TradingParamsDoNotMatchHash",
+ "inputs": []
+ },
+ {
+ "type": "function",
+ "name": "commit",
+ "inputs": [
+ {
+ "name": "orderHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
}
],
- "stateMutability": "view"
+ "outputs": [],
+ "stateMutability": "nonpayable"
},
{
"type": "function",
@@ -322,32 +216,6 @@
],
"stateMutability": "view"
},
- {
- "type": "function",
- "name": "solutionSettler",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "address",
- "internalType": "contract ISettlement"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "solutionSettlerDomainSeparator",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
- },
{
"type": "function",
"name": "token0",
@@ -374,19 +242,6 @@
],
"stateMutability": "view"
},
- {
- "type": "function",
- "name": "tradingParamsHash",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
- },
{
"type": "function",
"name": "verify",
@@ -481,117 +336,13 @@
{
"name": "buyTokenBalance",
"type": "bytes32",
- "internalType": "bytes32"
- }
- ]
- }
- ],
- "outputs": [],
- "stateMutability": "view"
- },
- {
- "type": "event",
- "name": "TradingDisabled",
- "inputs": [],
- "anonymous": false
- },
- {
- "type": "event",
- "name": "TradingEnabled",
- "inputs": [
- {
- "name": "hash",
- "type": "bytes32",
- "indexed": true,
- "internalType": "bytes32"
- },
- {
- "name": "params",
- "type": "tuple",
- "indexed": false,
- "internalType": "struct ConstantProduct.TradingParams",
- "components": [
- {
- "name": "minTradedToken0",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "priceOracle",
- "type": "address",
- "internalType": "contract IPriceOracle"
- },
- {
- "name": "priceOracleData",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "appData",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ]
- }
- ],
- "anonymous": false
- },
- {
- "type": "error",
- "name": "CommitOutsideOfSettlement",
- "inputs": []
- },
- {
- "type": "error",
- "name": "OnlyManagerCanCall",
- "inputs": []
- },
- {
- "type": "error",
- "name": "OrderDoesNotMatchCommitmentHash",
- "inputs": []
- },
- {
- "type": "error",
- "name": "OrderDoesNotMatchDefaultTradeableOrder",
- "inputs": []
- },
- {
- "type": "error",
- "name": "OrderDoesNotMatchMessageHash",
- "inputs": []
- },
- {
- "type": "error",
- "name": "OrderNotValid",
- "inputs": [
- {
- "name": "",
- "type": "string",
- "internalType": "string"
- }
- ]
- },
- {
- "type": "error",
- "name": "PollTryAtBlock",
- "inputs": [
- {
- "name": "blockNumber",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "message",
- "type": "string",
- "internalType": "string"
- }
- ]
- },
- {
- "type": "error",
- "name": "TradingParamsDoNotMatchHash",
- "inputs": []
+ "internalType": "bytes32"
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "view"
}
],
"bytecode": "0x610120604052348015610010575f80fd5b5060405161267838038061267883398101604081905261002f9161052f565b6001600160a01b03831660808190526040805163f698da2560e01b8152905163f698da259160048082019260209290919082900301815f875af1158015610078573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061009c9190610579565b610100526100aa823361015f565b6100b4813361015f565b336001600160a01b031660e0816001600160a01b0316815250505f836001600160a01b0316639b552cc26040518163ffffffff1660e01b81526004016020604051808303815f875af115801561010c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101309190610590565b905061013c838261015f565b610146828261015f565b506001600160a01b0391821660a0521660c0525061061c565b6101746001600160a01b038316825f19610178565b5050565b8015806101f05750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156101ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ee9190610579565b155b6102675760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084015b60405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091526102bd9185916102c216565b505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201525f9061030e906001600160a01b03851690849061038d565b905080515f148061032e57508080602001905181019061032e91906105b2565b6102bd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161025e565b606061039b84845f856103a3565b949350505050565b6060824710156104045760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161025e565b5f80866001600160a01b0316858760405161041f91906105d1565b5f6040518083038185875af1925050503d805f8114610459576040519150601f19603f3d011682016040523d82523d5f602084013e61045e565b606091505b5090925090506104708783838761047b565b979650505050505050565b606083156104e95782515f036104e2576001600160a01b0385163b6104e25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161025e565b508161039b565b61039b83838151156104fe5781518083602001fd5b8060405162461bcd60e51b815260040161025e91906105e7565b6001600160a01b038116811461052c575f80fd5b50565b5f805f60608486031215610541575f80fd5b835161054c81610518565b602085015190935061055d81610518565b604085015190925061056e81610518565b809150509250925092565b5f60208284031215610589575f80fd5b5051919050565b5f602082840312156105a0575f80fd5b81516105ab81610518565b9392505050565b5f602082840312156105c2575f80fd5b815180151581146105ab575f80fd5b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051611fbd6106bb5f395f81816102db015261042b01525f8181610236015281816104d90152610bf901525f81816102b40152818161059901528181610d5c01528181610ebf01528181610f8e015261100d01525f81816101380152818161057701528181610d3b01528181610e2801528181610f6b015261103001525f818161032201526112140152611fbd5ff3fe608060405234801561000f575f80fd5b506004361061012f575f3560e01c8063b09aaaca116100ad578063e3e6f5b21161007d578063eec50b9711610063578063eec50b9714610344578063f14fcbc81461034c578063ff2dbc9814610203575f80fd5b8063e3e6f5b2146102fd578063e516715b1461031d575f80fd5b8063b09aaaca14610289578063c5f3d2541461029c578063d21220a7146102af578063d25e0cb6146102d6575f80fd5b80631c7de94111610102578063481c6a75116100e8578063481c6a7514610231578063981a160b14610258578063a029a8d414610276575f80fd5b80631c7de941146102035780633e706e321461020a575f80fd5b80630dfe1681146101335780631303a484146101845780631626ba7e146101b557806317700f01146101f9575b5f80fd5b61015a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b7f6c3c90245457060f6517787b2c4b8cf500ca889d2304af02043bd5b513e3b5935c5b60405190815260200161017b565b6101c86101c33660046116bf565b61035f565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161017b565b6102016104d7565b005b6101a75f81565b6101a77f6c3c90245457060f6517787b2c4b8cf500ca889d2304af02043bd5b513e3b59381565b61015a7f000000000000000000000000000000000000000000000000000000000000000081565b61026161012c81565b60405163ffffffff909116815260200161017b565b6102016102843660046119ee565b610573565b6101a7610297366004611a3b565b610bc8565b6102016102aa366004611a75565b610bf7565b61015a7f000000000000000000000000000000000000000000000000000000000000000081565b6101a77f000000000000000000000000000000000000000000000000000000000000000081565b61031061030b366004611a3b565b610cb7565b60405161017b9190611aac565b61015a7f000000000000000000000000000000000000000000000000000000000000000081565b6101a75f5481565b61020161035a366004611b9a565b6111fc565b5f808061036e84860186611bb1565b915091505f5461037d82610bc8565b146103b4576040517ff1a6789000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a0822091526040517f190100000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006002820152602281019190915260429020868114610494576040517f593fcacd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61049f818385611291565b6104a98284610573565b507f1626ba7e00000000000000000000000000000000000000000000000000000000925050505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610546576040517ff87d0d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8080556040517fbcb8b8fbdea8aa6dc4ae41213e4da81e605a3d1a56ed851b9355182321c091909190a1565b80517f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff808416911614610677578073ffffffffffffffffffffffffffffffffffffffff16835f015173ffffffffffffffffffffffffffffffffffffffff1614610675576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c69642073656c6c20746f6b656e000000000000000000000000000060448201526064015b60405180910390fd5b905b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156106e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107059190611bff565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091505f9073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610772573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107969190611bff565b90508273ffffffffffffffffffffffffffffffffffffffff16856020015173ffffffffffffffffffffffffffffffffffffffff1614610831576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f696e76616c69642062757920746f6b656e000000000000000000000000000000604482015260640161066c565b604085015173ffffffffffffffffffffffffffffffffffffffff16156108b3576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f7265636569766572206d757374206265207a65726f2061646472657373000000604482015260640161066c565b6108bf61012c42611c43565b8560a0015163ffffffff161115610932576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f76616c696469747920746f6f2066617220696e20746865206675747572650000604482015260640161066c565b85606001518560c00151146109a3576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420617070446174610000000000000000000000000000000000604482015260640161066c565b60e085015115610a0f576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f66656520616d6f756e74206d757374206265207a65726f000000000000000000604482015260640161066c565b7f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc985610160015114610a9d576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f627579546f6b656e42616c616e6365206d757374206265206572633230000000604482015260640161066c565b7f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc985610140015114610b2b576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f73656c6c546f6b656e42616c616e6365206d7573742062652065726332300000604482015260640161066c565b6060850151610b3a9082611c56565b60808601516060870151610b4e9085611c6d565b610b589190611c56565b1015610bc0576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f726563656976656420616d6f756e7420746f6f206c6f77000000000000000000604482015260640161066c565b505050505050565b5f81604051602001610bda9190611ccc565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610c66576040517ff87d0d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610c7361029783611d27565b9050805f81905550807f510e4a4f76907c2d6158b343f7c4f2f597df385b727c26e9ef90e75093ace19a83604051610cab9190611d79565b60405180910390a25050565b60408051610180810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101919091525f80836020015173ffffffffffffffffffffffffffffffffffffffff1663355efdd97f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000087604001516040518463ffffffff1660e01b8152600401610d9e93929190611e3a565b6040805180830381865afa158015610db8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ddc9190611e72565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015291935091505f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610e6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e919190611bff565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610f19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3d9190611bff565b90925090505f80808080610f518888611c56565b90505f610f5e8a88611c56565b90505f8282101561100b577f000000000000000000000000000000000000000000000000000000000000000096507f00000000000000000000000000000000000000000000000000000000000000009550610fd6610fbd60028b611ec1565b610fd184610fcc8e6002611c56565b611346565b61137e565b945061100185610fe6818d611c56565b610ff09085611c43565b610ffa8c8f611c56565b60016113cb565b9350849050611098565b7f000000000000000000000000000000000000000000000000000000000000000096507f0000000000000000000000000000000000000000000000000000000000000000955061106e61105f60028a611ec1565b610fd185610fcc8f6002611c56565b94506110928561107e818e611c56565b6110889086611c43565b610ffa8b8e611c56565b93508390505b8c518110156110df576110df6040518060400160405280601781526020017f74726164656420616d6f756e7420746f6f20736d616c6c000000000000000000815250611426565b6040518061018001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200161115661012c611466565b63ffffffff1681526020018e6060015181526020015f81526020017ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677581526020016001151581526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc981526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc98152509b505050505050505050505050919050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461126b576040517fbf84897700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b807f6c3c90245457060f6517787b2c4b8cf500ca889d2304af02043bd5b513e3b5935d50565b7f6c3c90245457060f6517787b2c4b8cf500ca889d2304af02043bd5b513e3b5935c8381146113405780156112f2576040517fdafbdd1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6112fc84610cb7565b90506113088382611487565b61133e576040517fd9ff24c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b50505050565b5f82156113735781611359600185611c6d565b6113639190611ec1565b61136e906001611c43565b611375565b5f5b90505b92915050565b5f818310156113c5576113c56040518060400160405280601581526020017f7375627472616374696f6e20756e646572666c6f770000000000000000000000815250611426565b50900390565b5f806113d8868686611599565b905060018360028111156113ee576113ee611ed4565b14801561140a57505f848061140557611405611e94565b868809115b1561141d5761141a600182611c43565b90505b95945050505050565b611431436001611c43565b816040517f1fe8506e00000000000000000000000000000000000000000000000000000000815260040161066c929190611f01565b5f81806114738142611f19565b61147d9190611f3b565b6113789190611f63565b5f80825f015173ffffffffffffffffffffffffffffffffffffffff16845f015173ffffffffffffffffffffffffffffffffffffffff161490505f836020015173ffffffffffffffffffffffffffffffffffffffff16856020015173ffffffffffffffffffffffffffffffffffffffff161490505f846060015186606001511490505f856080015187608001511490505f8660a0015163ffffffff168860a0015163ffffffff161490505f8761010001518961010001511490505f88610120015115158a6101200151151514905086801561155e5750855b80156115675750845b80156115705750835b80156115795750825b80156115825750815b801561158b5750805b9a9950505050505050505050565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050805f036115ef578382816115e5576115e5611e94565b04925050506104d0565b808411611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f770000000000000000000000604482015260640161066c565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f805f604084860312156116d1575f80fd5b83359250602084013567ffffffffffffffff808211156116ef575f80fd5b818601915086601f830112611702575f80fd5b813581811115611710575f80fd5b876020828501011115611721575f80fd5b6020830194508093505050509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff8111828210171561178457611784611734565b60405290565b604051610180810167ffffffffffffffff8111828210171561178457611784611734565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117f5576117f5611734565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461181e575f80fd5b50565b5f60808284031215611831575f80fd5b611839611761565b90508135815260208083013561184e816117fd565b82820152604083013567ffffffffffffffff8082111561186c575f80fd5b818501915085601f83011261187f575f80fd5b81358181111561189157611891611734565b6118c1847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016117ae565b915080825286848285010111156118d6575f80fd5b80848401858401375f848284010152508060408501525050506060820135606082015292915050565b803561190a816117fd565b919050565b803563ffffffff8116811461190a575f80fd5b8035801515811461190a575f80fd5b5f6101808284031215611942575f80fd5b61194a61178a565b9050611955826118ff565b8152611963602083016118ff565b6020820152611974604083016118ff565b6040820152606082013560608201526080820135608082015261199960a0830161190f565b60a082015260c082013560c082015260e082013560e08201526101008083013581830152506101206119cc818401611922565b9082015261014082810135908201526101609182013591810191909152919050565b5f806101a08385031215611a00575f80fd5b823567ffffffffffffffff811115611a16575f80fd5b611a2285828601611821565b925050611a328460208501611931565b90509250929050565b5f60208284031215611a4b575f80fd5b813567ffffffffffffffff811115611a61575f80fd5b611a6d84828501611821565b949350505050565b5f60208284031215611a85575f80fd5b813567ffffffffffffffff811115611a9b575f80fd5b8201608081850312156104d0575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff16815261018081016020830151611af2602084018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151611b1a604084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015160608301526080830151608083015260a0830151611b4660a084018263ffffffff169052565b5060c083015160c083015260e083015160e083015261010080840151818401525061012080840151611b7b8285018215159052565b5050610140838101519083015261016092830151929091019190915290565b5f60208284031215611baa575f80fd5b5035919050565b5f806101a08385031215611bc3575f80fd5b611bcd8484611931565b915061018083013567ffffffffffffffff811115611be9575f80fd5b611bf585828601611821565b9150509250929050565b5f60208284031215611c0f575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561137857611378611c16565b808202811582820484141761137857611378611c16565b8181038181111561137857611378611c16565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff60208301511660408201525f604083015160806060840152611d1160a0840182611c80565b9050606084015160808401528091505092915050565b5f6113783683611821565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208152813560208201525f6020830135611d93816117fd565b73ffffffffffffffffffffffffffffffffffffffff811660408401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611de4575f80fd5b830160208101903567ffffffffffffffff811115611e00575f80fd5b803603821315611e0e575f80fd5b60806060850152611e2360a085018284611d32565b915050606084013560808401528091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015261141d6060830184611c80565b5f8060408385031215611e83575f80fd5b505080516020909101519092909150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82611ecf57611ecf611e94565b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b828152604060208201525f611a6d6040830184611c80565b5f63ffffffff80841680611f2f57611f2f611e94565b92169190910492915050565b63ffffffff818116838216028082169190828114611f5b57611f5b611c16565b505092915050565b63ffffffff818116838216019080821115611f8057611f80611c16565b509291505056fea2646970667358221220e3fb228b525d90b942c7e58fe2e2034a17bd258c082fd47740e764a7be45bac664736f6c63430008190033",
@@ -1496,5 +1247,256 @@
},
"version": 1
},
- "id": 169
+ "id": 169,
+ "_disabled": [
+ {
+ "type": "function",
+ "name": "COMMITMENT_SLOT",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "EMPTY_COMMITMENT",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "MAX_ORDER_DURATION",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint32",
+ "internalType": "uint32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "NO_TRADING",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "commitment",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "value",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "disableTrading",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "enableTrading",
+ "inputs": [
+ {
+ "name": "tradingParams",
+ "type": "tuple",
+ "internalType": "struct ConstantProduct.TradingParams",
+ "components": [
+ {
+ "name": "minTradedToken0",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "priceOracle",
+ "type": "address",
+ "internalType": "contract IPriceOracle"
+ },
+ {
+ "name": "priceOracleData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "appData",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "getTradeableOrder",
+ "inputs": [
+ {
+ "name": "tradingParams",
+ "type": "tuple",
+ "internalType": "struct ConstantProduct.TradingParams",
+ "components": [
+ {
+ "name": "minTradedToken0",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "priceOracle",
+ "type": "address",
+ "internalType": "contract IPriceOracle"
+ },
+ {
+ "name": "priceOracleData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "appData",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "order",
+ "type": "tuple",
+ "internalType": "struct GPv2Order.Data",
+ "components": [
+ {
+ "name": "sellToken",
+ "type": "address",
+ "internalType": "contract IERC20"
+ },
+ {
+ "name": "buyToken",
+ "type": "address",
+ "internalType": "contract IERC20"
+ },
+ {
+ "name": "receiver",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "sellAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "buyAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "validTo",
+ "type": "uint32",
+ "internalType": "uint32"
+ },
+ {
+ "name": "appData",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "feeAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "kind",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "partiallyFillable",
+ "type": "bool",
+ "internalType": "bool"
+ },
+ {
+ "name": "sellTokenBalance",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "buyTokenBalance",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "solutionSettler",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract ISettlement"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "solutionSettlerDomainSeparator",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "tradingParamsHash",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ]
}
diff --git a/crates/contracts/artifacts/CowAmmConstantProductFactory.json b/contracts/artifacts/CowAmmConstantProductFactory.json
similarity index 99%
rename from crates/contracts/artifacts/CowAmmConstantProductFactory.json
rename to contracts/artifacts/CowAmmConstantProductFactory.json
index 131f459659..66ecf78cbc 100644
--- a/crates/contracts/artifacts/CowAmmConstantProductFactory.json
+++ b/contracts/artifacts/CowAmmConstantProductFactory.json
@@ -12,250 +12,125 @@
"stateMutability": "nonpayable"
},
{
- "type": "function",
- "name": "ammDeterministicAddress",
+ "type": "event",
+ "name": "ConditionalOrderCreated",
"inputs": [
{
- "name": "ammOwner",
+ "name": "owner",
"type": "address",
+ "indexed": true,
"internalType": "address"
},
{
- "name": "token0",
- "type": "address",
- "internalType": "contract IERC20"
- },
- {
- "name": "token1",
- "type": "address",
- "internalType": "contract IERC20"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "address",
- "internalType": "address"
+ "name": "params",
+ "type": "tuple",
+ "indexed": false,
+ "internalType": "struct IConditionalOrder.ConditionalOrderParams",
+ "components": [
+ {
+ "name": "handler",
+ "type": "address",
+ "internalType": "contract IConditionalOrder"
+ },
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "staticInput",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
}
],
- "stateMutability": "view"
+ "anonymous": false
},
{
- "type": "function",
- "name": "create",
+ "type": "event",
+ "name": "Deployed",
"inputs": [
{
- "name": "token0",
+ "name": "amm",
"type": "address",
- "internalType": "contract IERC20"
+ "indexed": true,
+ "internalType": "contract ConstantProduct"
},
{
- "name": "amount0",
- "type": "uint256",
- "internalType": "uint256"
+ "name": "owner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
},
{
- "name": "token1",
+ "name": "token0",
"type": "address",
+ "indexed": false,
"internalType": "contract IERC20"
},
{
- "name": "amount1",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "minTradedToken0",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "priceOracle",
+ "name": "token1",
"type": "address",
- "internalType": "contract IPriceOracle"
- },
- {
- "name": "priceOracleData",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "appData",
- "type": "bytes32",
- "internalType": "bytes32"
+ "indexed": false,
+ "internalType": "contract IERC20"
}
],
- "outputs": [
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "TradingDisabled",
+ "inputs": [
{
"name": "amm",
"type": "address",
+ "indexed": true,
"internalType": "contract ConstantProduct"
}
],
- "stateMutability": "nonpayable"
+ "anonymous": false
},
{
- "type": "function",
- "name": "deposit",
+ "type": "error",
+ "name": "OnlyOwnerCanCall",
"inputs": [
{
- "name": "amm",
+ "name": "owner",
"type": "address",
- "internalType": "contract ConstantProduct"
- },
- {
- "name": "amount0",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "amount1",
- "type": "uint256",
- "internalType": "uint256"
+ "internalType": "address"
}
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
+ ]
},
{
- "type": "function",
- "name": "disableTrading",
+ "type": "error",
+ "name": "OrderNotValid",
"inputs": [
{
- "name": "amm",
- "type": "address",
- "internalType": "contract ConstantProduct"
+ "name": "",
+ "type": "string",
+ "internalType": "string"
}
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
+ ]
},
{
"type": "function",
- "name": "getTradeableOrderWithSignature",
+ "name": "ammDeterministicAddress",
"inputs": [
{
- "name": "amm",
+ "name": "ammOwner",
"type": "address",
- "internalType": "contract ConstantProduct"
- },
- {
- "name": "params",
- "type": "tuple",
- "internalType": "struct IConditionalOrder.ConditionalOrderParams",
- "components": [
- {
- "name": "handler",
- "type": "address",
- "internalType": "contract IConditionalOrder"
- },
- {
- "name": "salt",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "staticInput",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- },
- {
- "name": "",
- "type": "bytes",
- "internalType": "bytes"
+ "internalType": "address"
},
{
- "name": "",
- "type": "bytes32[]",
- "internalType": "bytes32[]"
- }
- ],
- "outputs": [
- {
- "name": "order",
- "type": "tuple",
- "internalType": "struct GPv2Order.Data",
- "components": [
- {
- "name": "sellToken",
- "type": "address",
- "internalType": "contract IERC20"
- },
- {
- "name": "buyToken",
- "type": "address",
- "internalType": "contract IERC20"
- },
- {
- "name": "receiver",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "sellAmount",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "buyAmount",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "validTo",
- "type": "uint32",
- "internalType": "uint32"
- },
- {
- "name": "appData",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "feeAmount",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "kind",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "partiallyFillable",
- "type": "bool",
- "internalType": "bool"
- },
- {
- "name": "sellTokenBalance",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "buyTokenBalance",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ]
+ "name": "token0",
+ "type": "address",
+ "internalType": "contract IERC20"
},
{
- "name": "signature",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "owner",
- "inputs": [
- {
- "name": "",
+ "name": "token1",
"type": "address",
- "internalType": "contract ConstantProduct"
+ "internalType": "contract IERC20"
}
],
"outputs": [
@@ -269,25 +144,27 @@
},
{
"type": "function",
- "name": "settler",
- "inputs": [],
- "outputs": [
+ "name": "create",
+ "inputs": [
{
- "name": "",
+ "name": "token0",
"type": "address",
- "internalType": "contract ISettlement"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "updateParameters",
- "inputs": [
+ "internalType": "contract IERC20"
+ },
{
- "name": "amm",
+ "name": "amount0",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "token1",
"type": "address",
- "internalType": "contract ConstantProduct"
+ "internalType": "contract IERC20"
+ },
+ {
+ "name": "amount1",
+ "type": "uint256",
+ "internalType": "uint256"
},
{
"name": "minTradedToken0",
@@ -309,134 +186,80 @@
"type": "bytes32",
"internalType": "bytes32"
}
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "function",
- "name": "withdraw",
- "inputs": [
- {
- "name": "amm",
- "type": "address",
- "internalType": "contract ConstantProduct"
- },
- {
- "name": "amount0",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "amount1",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "event",
- "name": "ConditionalOrderCreated",
- "inputs": [
- {
- "name": "owner",
- "type": "address",
- "indexed": true,
- "internalType": "address"
- },
- {
- "name": "params",
- "type": "tuple",
- "indexed": false,
- "internalType": "struct IConditionalOrder.ConditionalOrderParams",
- "components": [
- {
- "name": "handler",
- "type": "address",
- "internalType": "contract IConditionalOrder"
- },
- {
- "name": "salt",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "staticInput",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
+ ],
+ "outputs": [
+ {
+ "name": "amm",
+ "type": "address",
+ "internalType": "contract ConstantProduct"
}
],
- "anonymous": false
+ "stateMutability": "nonpayable"
},
{
- "type": "event",
- "name": "Deployed",
+ "type": "function",
+ "name": "deposit",
"inputs": [
{
"name": "amm",
"type": "address",
- "indexed": true,
"internalType": "contract ConstantProduct"
},
{
- "name": "owner",
- "type": "address",
- "indexed": true,
- "internalType": "address"
- },
- {
- "name": "token0",
- "type": "address",
- "indexed": false,
- "internalType": "contract IERC20"
+ "name": "amount0",
+ "type": "uint256",
+ "internalType": "uint256"
},
{
- "name": "token1",
- "type": "address",
- "indexed": false,
- "internalType": "contract IERC20"
+ "name": "amount1",
+ "type": "uint256",
+ "internalType": "uint256"
}
],
- "anonymous": false
+ "outputs": [],
+ "stateMutability": "nonpayable"
},
{
- "type": "event",
- "name": "TradingDisabled",
+ "type": "function",
+ "name": "owner",
"inputs": [
{
- "name": "amm",
+ "name": "",
"type": "address",
- "indexed": true,
"internalType": "contract ConstantProduct"
}
],
- "anonymous": false
- },
- {
- "type": "error",
- "name": "OnlyOwnerCanCall",
- "inputs": [
+ "outputs": [
{
- "name": "owner",
+ "name": "",
"type": "address",
"internalType": "address"
}
- ]
+ ],
+ "stateMutability": "view"
},
{
- "type": "error",
- "name": "OrderNotValid",
+ "type": "function",
+ "name": "withdraw",
"inputs": [
{
- "name": "",
- "type": "string",
- "internalType": "string"
+ "name": "amm",
+ "type": "address",
+ "internalType": "contract ConstantProduct"
+ },
+ {
+ "name": "amount0",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "amount1",
+ "type": "uint256",
+ "internalType": "uint256"
}
- ]
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
}
],
"bytecode": "0x60a0604052348015600e575f80fd5b506040516141b33803806141b3833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b60805161412761008c5f395f8181610189015281816102a801526108c401526141275ff3fe608060405234801561000f575f80fd5b506004361061009f575f3560e01c806337ebdf5011610072578063666e1b3911610058578063666e1b391461014f578063ab221a7614610184578063b5c5f672146101ab575f80fd5b806337ebdf50146101295780635b5d9ee61461013c575f80fd5b80630efe6a8b146100a357806322b155c6146100b857806326e0a196146100f55780632791056514610116575b5f80fd5b6100b66100b13660046111ea565b6101be565b005b6100cb6100c6366004611261565b6102a3565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101086101033660046112fb565b61045f565b6040516100ec9291906114fd565b6100b6610124366004611527565b610797565b6100cb610137366004611549565b61082f565b6100b661014a366004611591565b610a01565b6100cb61015d366004611527565b5f6020819052908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6100cb7f000000000000000000000000000000000000000000000000000000000000000081565b6100b66101b93660046111ea565b610b17565b61024f3384848673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561020d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102319190611617565b73ffffffffffffffffffffffffffffffffffffffff16929190610c46565b61029e3384838673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561020d573d5f803e3d5ffd5b505050565b5f33807f00000000000000000000000000000000000000000000000000000000000000008c8b6040516102d5906111b9565b73ffffffffffffffffffffffffffffffffffffffff9384168152918316602083015290911660408201526060018190604051809103905ff590508015801561031f573d5f803e3d5ffd5b506040805173ffffffffffffffffffffffffffffffffffffffff8e811682528c81166020830152929450828416928516917f6707255b2c5ca81220b2f3e408a269cb83baa6aa7e5e37aa1756883a6cdf06f1910160405180910390a373ffffffffffffffffffffffffffffffffffffffff8281165f90815260208190526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790556103d8828b8a6101be565b5f60405180608001604052808981526020018873ffffffffffffffffffffffffffffffffffffffff16815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200185905290506104508382610cdb565b50509998505050505050505050565b60408051610180810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101919091526060306104cf6020890189611527565b73ffffffffffffffffffffffffffffffffffffffff1614610551576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f63616e206f6e6c792068616e646c65206f776e206f726465727300000000000060448201526064015b60405180910390fd5b5f61055f6040890189611632565b81019061056c919061175c565b90508873ffffffffffffffffffffffffffffffffffffffff1663eec50b976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105db919061185a565b6040517fb09aaaca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b169063b09aaaca9061062d9085906004016118c3565b602060405180830381865afa158015610648573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066c919061185a565b146106d3576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f696e76616c69642074726164696e6720706172616d65746572730000000000006044820152606401610548565b6040517fe3e6f5b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a169063e3e6f5b2906107259084906004016118c3565b61018060405180830381865afa158015610741573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061076591906118f7565b9250828160405160200161077a9291906119b3565b604051602081830303815290604052915050965096945050505050565b73ffffffffffffffffffffffffffffffffffffffff8082165f9081526020819052604090205482911633146108225773ffffffffffffffffffffffffffffffffffffffff8181165f90815260208190526040908190205490517f68bafff800000000000000000000000000000000000000000000000000000000815291166004820152602401610548565b61082b82610e05565b5050565b5f807fff000000000000000000000000000000000000000000000000000000000000003073ffffffffffffffffffffffffffffffffffffffff8716604051610879602082016111b9565b8181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09081018352601f90910116604081815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166020840152808b169183019190915288166060820152608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261093a92916020016119eb565b604051602081830303815290604052805190602001206040516020016109c294939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152919052805160209091012095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8087165f908152602081905260409020548791163314610a8c5773ffffffffffffffffffffffffffffffffffffffff8181165f90815260208190526040908190205490517f68bafff800000000000000000000000000000000000000000000000000000000815291166004820152602401610548565b5f60405180608001604052808881526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018490529050610b0388610e05565b610b0d8882610cdb565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8084165f908152602081905260409020548491163314610ba25773ffffffffffffffffffffffffffffffffffffffff8181165f90815260208190526040908190205490517f68bafff800000000000000000000000000000000000000000000000000000000815291166004820152602401610548565b610bf18433858773ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561020d573d5f803e3d5ffd5b610c408433848773ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561020d573d5f803e3d5ffd5b50505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610c40908590610ea3565b6040517fc5f3d25400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063c5f3d25490610d2d9084906004016118c3565b5f604051808303815f87803b158015610d44575f80fd5b505af1158015610d56573d5f803e3d5ffd5b5050604080516060810182523081525f6020808301829052835191955073ffffffffffffffffffffffffffffffffffffffff881694507f2cceac5555b0ca45a3744ced542f54b56ad2eb45e521962372eef212a2cbf36193830191610dbd918891016118c3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152915251610df891906119ff565b60405180910390a2505050565b8073ffffffffffffffffffffffffffffffffffffffff166317700f016040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610e4a575f80fd5b505af1158015610e5c573d5f803e3d5ffd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fc75bf4f03c02fab9414a7d7a54048c0486722bc72f33ad924709a0593608ad2791505f90a250565b5f610f04826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fb09092919063ffffffff16565b905080515f1480610f24575080806020019051810190610f249190611a43565b61029e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610548565b6060610fbe84845f85610fc6565b949350505050565b606082471015611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610548565b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516110809190611a5c565b5f6040518083038185875af1925050503d805f81146110ba576040519150601f19603f3d011682016040523d82523d5f602084013e6110bf565b606091505b50915091506110d0878383876110db565b979650505050505050565b606083156111705782515f036111695773ffffffffffffffffffffffffffffffffffffffff85163b611169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610548565b5081610fbe565b610fbe83838151156111855781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105489190611a67565b61267880611a7a83390190565b73ffffffffffffffffffffffffffffffffffffffff811681146111e7575f80fd5b50565b5f805f606084860312156111fc575f80fd5b8335611207816111c6565b95602085013595506040909401359392505050565b5f8083601f84011261122c575f80fd5b50813567ffffffffffffffff811115611243575f80fd5b60208301915083602082850101111561125a575f80fd5b9250929050565b5f805f805f805f805f6101008a8c03121561127a575f80fd5b8935611285816111c6565b985060208a0135975060408a013561129c816111c6565b965060608a0135955060808a0135945060a08a01356112ba816111c6565b935060c08a013567ffffffffffffffff8111156112d5575f80fd5b6112e18c828d0161121c565b9a9d999c50979a9699959894979660e00135949350505050565b5f805f805f8060808789031215611310575f80fd5b863561131b816111c6565b9550602087013567ffffffffffffffff80821115611337575f80fd5b908801906060828b03121561134a575f80fd5b9095506040880135908082111561135f575f80fd5b61136b8a838b0161121c565b90965094506060890135915080821115611383575f80fd5b818901915089601f830112611396575f80fd5b8135818111156113a4575f80fd5b8a60208260051b85010111156113b8575f80fd5b6020830194508093505050509295509295509295565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161140f602084018273ffffffffffffffffffffffffffffffffffffffff169052565b506040810151611437604084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606081015160608301526080810151608083015260a081015161146360a084018263ffffffff169052565b5060c081015160c083015260e081015160e0830152610100808201518184015250610120808201516114988285018215159052565b5050610140818101519083015261016090810151910152565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f6101a061150b83866113ce565b8061018084015261151e818401856114b1565b95945050505050565b5f60208284031215611537575f80fd5b8135611542816111c6565b9392505050565b5f805f6060848603121561155b575f80fd5b8335611566816111c6565b92506020840135611576816111c6565b91506040840135611586816111c6565b809150509250925092565b5f805f805f8060a087890312156115a6575f80fd5b86356115b1816111c6565b95506020870135945060408701356115c8816111c6565b9350606087013567ffffffffffffffff8111156115e3575f80fd5b6115ef89828a0161121c565b979a9699509497949695608090950135949350505050565b8051611612816111c6565b919050565b5f60208284031215611627575f80fd5b8151611542816111c6565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611665575f80fd5b83018035915067ffffffffffffffff82111561167f575f80fd5b60200191503681900382131561125a575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff811182821017156116e3576116e3611693565b60405290565b604051610180810167ffffffffffffffff811182821017156116e3576116e3611693565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561175457611754611693565b604052919050565b5f602080838503121561176d575f80fd5b823567ffffffffffffffff80821115611784575f80fd5b9084019060808287031215611797575f80fd5b61179f6116c0565b82358152838301356117b0816111c6565b818501526040830135828111156117c5575f80fd5b8301601f810188136117d5575f80fd5b8035838111156117e7576117e7611693565b611817867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161170d565b9350808452888682840101111561182c575f80fd5b80868301878601375f8682860101525050816040820152606083013560608201528094505050505092915050565b5f6020828403121561186a575f80fd5b5051919050565b8051825273ffffffffffffffffffffffffffffffffffffffff60208201511660208301525f6040820151608060408501526118af60808501826114b1565b606093840151949093019390935250919050565b602081525f6115426020830184611871565b805163ffffffff81168114611612575f80fd5b80518015158114611612575f80fd5b5f6101808284031215611908575f80fd5b6119106116e9565b61191983611607565b815261192760208401611607565b602082015261193860408401611607565b6040820152606083015160608201526080830151608082015261195d60a084016118d5565b60a082015260c083015160c082015260e083015160e08201526101008084015181830152506101206119908185016118e8565b908201526101408381015190820152610160928301519281019290925250919050565b5f6101a06119c183866113ce565b8061018084015261151e81840185611871565b5f81518060208401855e5f93019283525090919050565b5f610fbe6119f983866119d4565b846119d4565b6020815273ffffffffffffffffffffffffffffffffffffffff8251166020820152602082015160408201525f6040830151606080840152610fbe60808401826114b1565b5f60208284031215611a53575f80fd5b611542826118e8565b5f61154282846119d4565b602081525f61154260208301846114b156fe610120604052348015610010575f80fd5b5060405161267838038061267883398101604081905261002f9161052f565b6001600160a01b03831660808190526040805163f698da2560e01b8152905163f698da259160048082019260209290919082900301815f875af1158015610078573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061009c9190610579565b610100526100aa823361015f565b6100b4813361015f565b336001600160a01b031660e0816001600160a01b0316815250505f836001600160a01b0316639b552cc26040518163ffffffff1660e01b81526004016020604051808303815f875af115801561010c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101309190610590565b905061013c838261015f565b610146828261015f565b506001600160a01b0391821660a0521660c0525061061c565b6101746001600160a01b038316825f19610178565b5050565b8015806101f05750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156101ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ee9190610579565b155b6102675760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084015b60405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091526102bd9185916102c216565b505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201525f9061030e906001600160a01b03851690849061038d565b905080515f148061032e57508080602001905181019061032e91906105b2565b6102bd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161025e565b606061039b84845f856103a3565b949350505050565b6060824710156104045760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161025e565b5f80866001600160a01b0316858760405161041f91906105d1565b5f6040518083038185875af1925050503d805f8114610459576040519150601f19603f3d011682016040523d82523d5f602084013e61045e565b606091505b5090925090506104708783838761047b565b979650505050505050565b606083156104e95782515f036104e2576001600160a01b0385163b6104e25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161025e565b508161039b565b61039b83838151156104fe5781518083602001fd5b8060405162461bcd60e51b815260040161025e91906105e7565b6001600160a01b038116811461052c575f80fd5b50565b5f805f60608486031215610541575f80fd5b835161054c81610518565b602085015190935061055d81610518565b604085015190925061056e81610518565b809150509250925092565b5f60208284031215610589575f80fd5b5051919050565b5f602082840312156105a0575f80fd5b81516105ab81610518565b9392505050565b5f602082840312156105c2575f80fd5b815180151581146105ab575f80fd5b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051611fbd6106bb5f395f81816102db015261042b01525f8181610236015281816104d90152610bf901525f81816102b40152818161059901528181610d5c01528181610ebf01528181610f8e015261100d01525f81816101380152818161057701528181610d3b01528181610e2801528181610f6b015261103001525f818161032201526112140152611fbd5ff3fe608060405234801561000f575f80fd5b506004361061012f575f3560e01c8063b09aaaca116100ad578063e3e6f5b21161007d578063eec50b9711610063578063eec50b9714610344578063f14fcbc81461034c578063ff2dbc9814610203575f80fd5b8063e3e6f5b2146102fd578063e516715b1461031d575f80fd5b8063b09aaaca14610289578063c5f3d2541461029c578063d21220a7146102af578063d25e0cb6146102d6575f80fd5b80631c7de94111610102578063481c6a75116100e8578063481c6a7514610231578063981a160b14610258578063a029a8d414610276575f80fd5b80631c7de941146102035780633e706e321461020a575f80fd5b80630dfe1681146101335780631303a484146101845780631626ba7e146101b557806317700f01146101f9575b5f80fd5b61015a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b7f6c3c90245457060f6517787b2c4b8cf500ca889d2304af02043bd5b513e3b5935c5b60405190815260200161017b565b6101c86101c33660046116bf565b61035f565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161017b565b6102016104d7565b005b6101a75f81565b6101a77f6c3c90245457060f6517787b2c4b8cf500ca889d2304af02043bd5b513e3b59381565b61015a7f000000000000000000000000000000000000000000000000000000000000000081565b61026161012c81565b60405163ffffffff909116815260200161017b565b6102016102843660046119ee565b610573565b6101a7610297366004611a3b565b610bc8565b6102016102aa366004611a75565b610bf7565b61015a7f000000000000000000000000000000000000000000000000000000000000000081565b6101a77f000000000000000000000000000000000000000000000000000000000000000081565b61031061030b366004611a3b565b610cb7565b60405161017b9190611aac565b61015a7f000000000000000000000000000000000000000000000000000000000000000081565b6101a75f5481565b61020161035a366004611b9a565b6111fc565b5f808061036e84860186611bb1565b915091505f5461037d82610bc8565b146103b4576040517ff1a6789000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a0822091526040517f190100000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006002820152602281019190915260429020868114610494576040517f593fcacd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61049f818385611291565b6104a98284610573565b507f1626ba7e00000000000000000000000000000000000000000000000000000000925050505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610546576040517ff87d0d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8080556040517fbcb8b8fbdea8aa6dc4ae41213e4da81e605a3d1a56ed851b9355182321c091909190a1565b80517f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff808416911614610677578073ffffffffffffffffffffffffffffffffffffffff16835f015173ffffffffffffffffffffffffffffffffffffffff1614610675576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c69642073656c6c20746f6b656e000000000000000000000000000060448201526064015b60405180910390fd5b905b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156106e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107059190611bff565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091505f9073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610772573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107969190611bff565b90508273ffffffffffffffffffffffffffffffffffffffff16856020015173ffffffffffffffffffffffffffffffffffffffff1614610831576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f696e76616c69642062757920746f6b656e000000000000000000000000000000604482015260640161066c565b604085015173ffffffffffffffffffffffffffffffffffffffff16156108b3576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f7265636569766572206d757374206265207a65726f2061646472657373000000604482015260640161066c565b6108bf61012c42611c43565b8560a0015163ffffffff161115610932576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f76616c696469747920746f6f2066617220696e20746865206675747572650000604482015260640161066c565b85606001518560c00151146109a3576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420617070446174610000000000000000000000000000000000604482015260640161066c565b60e085015115610a0f576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f66656520616d6f756e74206d757374206265207a65726f000000000000000000604482015260640161066c565b7f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc985610160015114610a9d576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f627579546f6b656e42616c616e6365206d757374206265206572633230000000604482015260640161066c565b7f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc985610140015114610b2b576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f73656c6c546f6b656e42616c616e6365206d7573742062652065726332300000604482015260640161066c565b6060850151610b3a9082611c56565b60808601516060870151610b4e9085611c6d565b610b589190611c56565b1015610bc0576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f726563656976656420616d6f756e7420746f6f206c6f77000000000000000000604482015260640161066c565b505050505050565b5f81604051602001610bda9190611ccc565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610c66576040517ff87d0d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610c7361029783611d27565b9050805f81905550807f510e4a4f76907c2d6158b343f7c4f2f597df385b727c26e9ef90e75093ace19a83604051610cab9190611d79565b60405180910390a25050565b60408051610180810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101919091525f80836020015173ffffffffffffffffffffffffffffffffffffffff1663355efdd97f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000087604001516040518463ffffffff1660e01b8152600401610d9e93929190611e3a565b6040805180830381865afa158015610db8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ddc9190611e72565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015291935091505f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610e6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e919190611bff565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610f19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3d9190611bff565b90925090505f80808080610f518888611c56565b90505f610f5e8a88611c56565b90505f8282101561100b577f000000000000000000000000000000000000000000000000000000000000000096507f00000000000000000000000000000000000000000000000000000000000000009550610fd6610fbd60028b611ec1565b610fd184610fcc8e6002611c56565b611346565b61137e565b945061100185610fe6818d611c56565b610ff09085611c43565b610ffa8c8f611c56565b60016113cb565b9350849050611098565b7f000000000000000000000000000000000000000000000000000000000000000096507f0000000000000000000000000000000000000000000000000000000000000000955061106e61105f60028a611ec1565b610fd185610fcc8f6002611c56565b94506110928561107e818e611c56565b6110889086611c43565b610ffa8b8e611c56565b93508390505b8c518110156110df576110df6040518060400160405280601781526020017f74726164656420616d6f756e7420746f6f20736d616c6c000000000000000000815250611426565b6040518061018001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200161115661012c611466565b63ffffffff1681526020018e6060015181526020015f81526020017ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677581526020016001151581526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc981526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc98152509b505050505050505050505050919050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461126b576040517fbf84897700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b807f6c3c90245457060f6517787b2c4b8cf500ca889d2304af02043bd5b513e3b5935d50565b7f6c3c90245457060f6517787b2c4b8cf500ca889d2304af02043bd5b513e3b5935c8381146113405780156112f2576040517fdafbdd1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6112fc84610cb7565b90506113088382611487565b61133e576040517fd9ff24c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b50505050565b5f82156113735781611359600185611c6d565b6113639190611ec1565b61136e906001611c43565b611375565b5f5b90505b92915050565b5f818310156113c5576113c56040518060400160405280601581526020017f7375627472616374696f6e20756e646572666c6f770000000000000000000000815250611426565b50900390565b5f806113d8868686611599565b905060018360028111156113ee576113ee611ed4565b14801561140a57505f848061140557611405611e94565b868809115b1561141d5761141a600182611c43565b90505b95945050505050565b611431436001611c43565b816040517f1fe8506e00000000000000000000000000000000000000000000000000000000815260040161066c929190611f01565b5f81806114738142611f19565b61147d9190611f3b565b6113789190611f63565b5f80825f015173ffffffffffffffffffffffffffffffffffffffff16845f015173ffffffffffffffffffffffffffffffffffffffff161490505f836020015173ffffffffffffffffffffffffffffffffffffffff16856020015173ffffffffffffffffffffffffffffffffffffffff161490505f846060015186606001511490505f856080015187608001511490505f8660a0015163ffffffff168860a0015163ffffffff161490505f8761010001518961010001511490505f88610120015115158a6101200151151514905086801561155e5750855b80156115675750845b80156115705750835b80156115795750825b80156115825750815b801561158b5750805b9a9950505050505050505050565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050805f036115ef578382816115e5576115e5611e94565b04925050506104d0565b808411611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f770000000000000000000000604482015260640161066c565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f805f604084860312156116d1575f80fd5b83359250602084013567ffffffffffffffff808211156116ef575f80fd5b818601915086601f830112611702575f80fd5b813581811115611710575f80fd5b876020828501011115611721575f80fd5b6020830194508093505050509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff8111828210171561178457611784611734565b60405290565b604051610180810167ffffffffffffffff8111828210171561178457611784611734565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117f5576117f5611734565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461181e575f80fd5b50565b5f60808284031215611831575f80fd5b611839611761565b90508135815260208083013561184e816117fd565b82820152604083013567ffffffffffffffff8082111561186c575f80fd5b818501915085601f83011261187f575f80fd5b81358181111561189157611891611734565b6118c1847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016117ae565b915080825286848285010111156118d6575f80fd5b80848401858401375f848284010152508060408501525050506060820135606082015292915050565b803561190a816117fd565b919050565b803563ffffffff8116811461190a575f80fd5b8035801515811461190a575f80fd5b5f6101808284031215611942575f80fd5b61194a61178a565b9050611955826118ff565b8152611963602083016118ff565b6020820152611974604083016118ff565b6040820152606082013560608201526080820135608082015261199960a0830161190f565b60a082015260c082013560c082015260e082013560e08201526101008083013581830152506101206119cc818401611922565b9082015261014082810135908201526101609182013591810191909152919050565b5f806101a08385031215611a00575f80fd5b823567ffffffffffffffff811115611a16575f80fd5b611a2285828601611821565b925050611a328460208501611931565b90509250929050565b5f60208284031215611a4b575f80fd5b813567ffffffffffffffff811115611a61575f80fd5b611a6d84828501611821565b949350505050565b5f60208284031215611a85575f80fd5b813567ffffffffffffffff811115611a9b575f80fd5b8201608081850312156104d0575f80fd5b815173ffffffffffffffffffffffffffffffffffffffff16815261018081016020830151611af2602084018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151611b1a604084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606083015160608301526080830151608083015260a0830151611b4660a084018263ffffffff169052565b5060c083015160c083015260e083015160e083015261010080840151818401525061012080840151611b7b8285018215159052565b5050610140838101519083015261016092830151929091019190915290565b5f60208284031215611baa575f80fd5b5035919050565b5f806101a08385031215611bc3575f80fd5b611bcd8484611931565b915061018083013567ffffffffffffffff811115611be9575f80fd5b611bf585828601611821565b9150509250929050565b5f60208284031215611c0f575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561137857611378611c16565b808202811582820484141761137857611378611c16565b8181038181111561137857611378611c16565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff60208301511660408201525f604083015160806060840152611d1160a0840182611c80565b9050606084015160808401528091505092915050565b5f6113783683611821565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208152813560208201525f6020830135611d93816117fd565b73ffffffffffffffffffffffffffffffffffffffff811660408401525060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611de4575f80fd5b830160208101903567ffffffffffffffff811115611e00575f80fd5b803603821315611e0e575f80fd5b60806060850152611e2360a085018284611d32565b915050606084013560808401528091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff80861683528085166020840152506060604083015261141d6060830184611c80565b5f8060408385031215611e83575f80fd5b505080516020909101519092909150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82611ecf57611ecf611e94565b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b828152604060208201525f611a6d6040830184611c80565b5f63ffffffff80841680611f2f57611f2f611e94565b92169190910492915050565b63ffffffff818116838216028082169190828114611f5b57611f5b611c16565b505092915050565b63ffffffff818116838216019080821115611f8057611f80611c16565b509291505056fea2646970667358221220e3fb228b525d90b942c7e58fe2e2034a17bd258c082fd47740e764a7be45bac664736f6c63430008190033a26469706673582212201190cf42f989cee23f12597c8c1e9daab6d8c816513349c3ce7fd229cae5b0ff64736f6c63430008190033",
@@ -1428,5 +1251,184 @@
},
"version": 1
},
- "id": 170
+ "id": 170,
+ "_disabled": [
+ {
+ "type": "function",
+ "name": "disableTrading",
+ "inputs": [
+ {
+ "name": "amm",
+ "type": "address",
+ "internalType": "contract ConstantProduct"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "getTradeableOrderWithSignature",
+ "inputs": [
+ {
+ "name": "amm",
+ "type": "address",
+ "internalType": "contract ConstantProduct"
+ },
+ {
+ "name": "params",
+ "type": "tuple",
+ "internalType": "struct IConditionalOrder.ConditionalOrderParams",
+ "components": [
+ {
+ "name": "handler",
+ "type": "address",
+ "internalType": "contract IConditionalOrder"
+ },
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "staticInput",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "",
+ "type": "bytes32[]",
+ "internalType": "bytes32[]"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "order",
+ "type": "tuple",
+ "internalType": "struct GPv2Order.Data",
+ "components": [
+ {
+ "name": "sellToken",
+ "type": "address",
+ "internalType": "contract IERC20"
+ },
+ {
+ "name": "buyToken",
+ "type": "address",
+ "internalType": "contract IERC20"
+ },
+ {
+ "name": "receiver",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "sellAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "buyAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "validTo",
+ "type": "uint32",
+ "internalType": "uint32"
+ },
+ {
+ "name": "appData",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "feeAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "kind",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "partiallyFillable",
+ "type": "bool",
+ "internalType": "bool"
+ },
+ {
+ "name": "sellTokenBalance",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "buyTokenBalance",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ]
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "settler",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract ISettlement"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "updateParameters",
+ "inputs": [
+ {
+ "name": "amm",
+ "type": "address",
+ "internalType": "contract ConstantProduct"
+ },
+ {
+ "name": "minTradedToken0",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "priceOracle",
+ "type": "address",
+ "internalType": "contract IPriceOracle"
+ },
+ {
+ "name": "priceOracleData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "appData",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ }
+ ]
}
diff --git a/crates/contracts/artifacts/CowAmmFactoryGetter.json b/contracts/artifacts/CowAmmFactoryGetter.json
similarity index 100%
rename from crates/contracts/artifacts/CowAmmFactoryGetter.json
rename to contracts/artifacts/CowAmmFactoryGetter.json
diff --git a/crates/contracts/artifacts/CowAmmLegacyHelper.json b/contracts/artifacts/CowAmmLegacyHelper.json
similarity index 99%
rename from crates/contracts/artifacts/CowAmmLegacyHelper.json
rename to contracts/artifacts/CowAmmLegacyHelper.json
index 391823f88c..892d1e1d16 100644
--- a/crates/contracts/artifacts/CowAmmLegacyHelper.json
+++ b/contracts/artifacts/CowAmmLegacyHelper.json
@@ -6,73 +6,59 @@
"stateMutability": "nonpayable"
},
{
- "type": "function",
- "name": "factory",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "address",
- "internalType": "address"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "getSnapshot",
+ "type": "event",
+ "name": "COWAMMPoolCreated",
"inputs": [
{
"name": "amm",
"type": "address",
+ "indexed": true,
"internalType": "address"
}
],
- "outputs": [
- {
- "name": "",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "stateMutability": "view"
+ "anonymous": false
},
{
- "type": "function",
- "name": "isLegacy",
- "inputs": [
- {
- "name": "amm",
- "type": "address",
- "internalType": "address"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bool",
- "internalType": "bool"
- }
- ],
- "stateMutability": "view"
+ "type": "error",
+ "name": "InvalidArrayLength",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "MathOverflowedMulDiv",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "NoOrder",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "PoolDoesNotExist",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "PoolIsClosed",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "PoolIsPaused",
+ "inputs": []
},
{
"type": "function",
- "name": "isLegacyEnabled",
- "inputs": [
+ "name": "factory",
+ "inputs": [],
+ "outputs": [
{
- "name": "amm",
+ "name": "",
"type": "address",
"internalType": "address"
}
],
- "outputs": [
- {
- "name": "success",
- "type": "bool",
- "internalType": "bool"
- }
- ],
"stateMutability": "view"
},
{
@@ -228,49 +214,6 @@
}
],
"stateMutability": "view"
- },
- {
- "type": "event",
- "name": "COWAMMPoolCreated",
- "inputs": [
- {
- "name": "amm",
- "type": "address",
- "indexed": true,
- "internalType": "address"
- }
- ],
- "anonymous": false
- },
- {
- "type": "error",
- "name": "InvalidArrayLength",
- "inputs": []
- },
- {
- "type": "error",
- "name": "MathOverflowedMulDiv",
- "inputs": []
- },
- {
- "type": "error",
- "name": "NoOrder",
- "inputs": []
- },
- {
- "type": "error",
- "name": "PoolDoesNotExist",
- "inputs": []
- },
- {
- "type": "error",
- "name": "PoolIsClosed",
- "inputs": []
- },
- {
- "type": "error",
- "name": "PoolIsPaused",
- "inputs": []
}
],
"bytecode": "0x608060405234801561000f575f80fd5b5061001861001d565b6102ff565b46600181900361011257610044739941fd7db2003308e7ee17b04400012278f12ac66102c9565b61006173b3bf81714f704720dcb0351ff0d42eca61b069fc6102c9565b61007e73301076c36e034948a747bb61bab9cd03f62672e36102c9565b61009b73027e1cbf2c299cba5eb8a2584910d04f1a8aa4036102c9565b6100b873beef5afe88ef73337e5070ab2855d37dbf5493a46102c9565b6100d573c6b13d5e662fa0458f03995bcb824a1934aa895f6102c9565b6100f273d7cb8cc1b56356bb7b78d02e785ead28e21586606102c9565b61010f73079c868f97aed8e0d03f11e1529c3b056ff21cea6102c9565b50565b8060640361010f5761013773bc6159fd429be18206e60b3bb01d7289f905511b6102c9565b61015473e5d1aa8565f5dbfc06cde20dfd76b4c7c6d43bd56102c9565b610171739d8570ef9a519ca81daec35212f435d9843ba5646102c9565b61018e73d97c31e53f16f495715ce71e12e11b9545eedd8b6102c9565b6101ab73ff1bd3d570e3544c183ba77f5a4d3cc742c8d2b36102c9565b6101c873209d269dfd66b9cec764de7eb6fefc24f75bdd486102c9565b6101e573c37575ad8efe530fd8a79aeb0087e5872a24dabc6102c9565b610202731c7828dadade12a848f36be8e2d3146462abff686102c9565b61021f73aba5294bba7d3635c2a3e44d0e87ea7f58898fb76102c9565b61023c736eb7be972aebb6be2d9acf437cb412c0abee912b6102c9565b61025973c4d09969aad7f252c75dd352bbbd719e34ed06ad6102c9565b61027673a25af86a5dbea45e9fd70c1879489f63d081ad446102c9565b6102937357492cb6c8ee2998e9d83ddc8c713e781ffe548e6102c9565b6102b073c33e3ec14556a8e71be3097fe2dc8c0b9119c8976102c9565b61010f7377472826875953374ed3084c31a483f827987f145b6040516001600160a01b038216907f0d03834d0d86c7f57e877af40e26f176dc31bd637535d4ba153d1ac9de88a7ea905f90a250565b6156848061030c5f395ff3fe608060405234801561000f575f80fd5b506004361061006f575f3560e01c80632aec79a01161004d5780632aec79a0146100de578063c45a0155146100f1578063e48603391461011e575f80fd5b806310029daa14610073578063215702561461009b57806327242c9b146100bb575b5f80fd5b610086610081366004612462565b61013e565b60405190151581526020015b60405180910390f35b6100ae6100a9366004612462565b61050c565b60405161009291906124c9565b6100ce6100c93660046124db565b610cc6565b60405161009294939291906126e9565b6100866100ec366004612462565b61132d565b6100f9611340565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610092565b61013161012c366004612462565b611410565b6040516100929190612734565b6040517f5624b25b0000000000000000000000000000000000000000000000000000000081527f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d56004820152600160248201525f90819073ffffffffffffffffffffffffffffffffffffffff841690635624b25b906044015f60405180830381865afa1580156101d0573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610215919081019061288a565b80602001905181019061022891906128c4565b90505f732f55e8b20d0b9fefa187aa7d00b6cbe563605bf573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161490505f73fdafc9d1902f4e0b84f65f49f244b32b31013b7473ffffffffffffffffffffffffffffffffffffffff16732f55e8b20d0b9fefa187aa7d00b6cbe563605bf573ffffffffffffffffffffffffffffffffffffffff166351cad5ee87739008d19f58aabd9ed0d60971565aa8510560ab4173ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561032a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061034e91906128df565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381865afa1580156103ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103de91906128c4565b73ffffffffffffffffffffffffffffffffffffffff161490505f6104018661050c565b80602001905181019061041491906128f6565b90505f73fdafc9d1902f4e0b84f65f49f244b32b31013b7473ffffffffffffffffffffffffffffffffffffffff16636108c532888460405160200161045991906129cf565b604051602081830303815290604052805190602001206040518363ffffffff1660e01b81526004016104ad92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b602060405180830381865afa1580156104c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ec91906129e1565b90508380156104f85750825b80156105015750805b979650505050505050565b60604660018190036107bd5773ffffffffffffffffffffffffffffffffffffffff8316739941fd7db2003308e7ee17b04400012278f12ac60361056c57604051806101e001604052806101c0815260200161482f6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673b3bf81714f704720dcb0351ff0d42eca61b069fc036105c057604051806101e001604052806101c081526020016150ef6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673301076c36e034948a747bb61bab9cd03f62672e30361061457604051806101e001604052806101c0815260200161364f6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673027e1cbf2c299cba5eb8a2584910d04f1a8aa4030361066857604051806101e001604052806101c08152602001612d2f6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673beef5afe88ef73337e5070ab2855d37dbf5493a4036106bc57604051806101e001604052806101c081526020016142ef6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673c6b13d5e662fa0458f03995bcb824a1934aa895f0361071057604051806101e001604052806101c0815260200161412f6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673d7cb8cc1b56356bb7b78d02e785ead28e21586600361076457604051806101e001604052806101c081526020016139cf6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673079c868f97aed8e0d03f11e1529c3b056ff21cea036107b857604051806101e001604052806101c081526020016149ef6101c091399392505050565b610cb1565b80606403610cb15773ffffffffffffffffffffffffffffffffffffffff831673bc6159fd429be18206e60b3bb01d7289f905511b0361081957604051806101e001604052806101c08152602001612eef6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673e5d1aa8565f5dbfc06cde20dfd76b4c7c6d43bd50361086d57604051806101e001604052806101c0815260200161466f6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff8316739d8570ef9a519ca81daec35212f435d9843ba564036108c157604051806101e001604052806101c08152602001614baf6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673d97c31e53f16f495715ce71e12e11b9545eedd8b036109155760405180610240016040528061022081526020016130af61022091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673ff1bd3d570e3544c183ba77f5a4d3cc742c8d2b30361096957604051806101e001604052806101c0815260200161548f6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673209d269dfd66b9cec764de7eb6fefc24f75bdd48036109bd57604051806101e001604052806101c08152602001614f2f6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673c37575ad8efe530fd8a79aeb0087e5872a24dabc03610a1157604051806101e001604052806101c0815260200161348f6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff8316731c7828dadade12a848f36be8e2d3146462abff6803610a6557604051806101e001604052806101c08152602001613f6f6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673aba5294bba7d3635c2a3e44d0e87ea7f58898fb703610ab957604051806101e001604052806101c08152602001614d6f6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff8316736eb7be972aebb6be2d9acf437cb412c0abee912b03610b0d57604051806101e001604052806101c081526020016132cf6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673c4d09969aad7f252c75dd352bbbd719e34ed06ad03610b61576040518061024001604052806102208152602001613d4f61022091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673a25af86a5dbea45e9fd70c1879489f63d081ad4403610bb557604051806101e001604052806101c081526020016144af6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff83167357492cb6c8ee2998e9d83ddc8c713e781ffe548e03610c09576040518061020001604052806101e081526020016152af6101e091399392505050565b73ffffffffffffffffffffffffffffffffffffffff831673c33e3ec14556a8e71be3097fe2dc8c0b9119c89703610c5d57604051806101e001604052806101c0815260200161380f6101c091399392505050565b73ffffffffffffffffffffffffffffffffffffffff83167377472826875953374ed3084c31a483f827987f1403610cb157604051806101e001604052806101c08152602001613b8f6101c091399392505050565b505060408051602081019091525f8152919050565b60408051610180810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101919091526060808060028514610d64576040517f9d89020a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610d6f8861132d565b6112e957610d7c88611696565b610de7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f506f6f6c206973206e6f74206120436f5720414d4d000000000000000000000060448201526064015b60405180910390fd5b5f8873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5591906128c4565b90505f8973ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ea1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec591906128c4565b90508973ffffffffffffffffffffffffffffffffffffffff16634ada218b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3491906129e1565b15155f03610f6e576040517f21081abf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110816040518060c001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018b8b6001818110610fe357610fe3612a00565b9050602002013581526020018b8b5f81811061100157611001612a00565b9050602002013581526020018c73ffffffffffffffffffffffffffffffffffffffff16636dbc88136040518163ffffffff1660e01b8152600401602060405180830381865afa158015611056573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107a91906128df565b905261174e565b9650866040516020016110949190612a2d565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815260018084528383019092529450816020015b60408051606080820183525f8083526020830152918101919091528152602001906001900390816110d157905050955060405180606001604052808b73ffffffffffffffffffffffffffffffffffffffff1681526020015f815260200161123b739008d19f58aabd9ed0d60971565aa8510560ab4173ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561118e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b291906128df565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08b0180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a0822091526040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60405160240161124d91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff14fcbc8000000000000000000000000000000000000000000000000000000001790529052865187905f906112d7576112d7612a00565b602002602001018190525050506112ff565b6112f4888888611ad6565b929750909550935090505b8781604051602001611312929190612a3c565b60405160208183030381529060405291505093509350935093565b5f806113388361050c565b511192915050565b5f46600181900361136657738deed8ed7c5fcb55884f13f121654bb4bb7c843791505090565b8060640361138957732af6c59fc957d4a45ddbbd927fa30f7c5051f58391505090565b8062aa36a7036113ae5773bd18758055dbe3ed37a2471394559ae97a5da5c091505090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e737570706f7274656420636861696e0000000000000000000000000000006044820152606401610dde565b60408051600280825260608083018452926020830190803683370190505090506114398261132d565b6115b5578173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611486573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114aa91906128c4565b815f815181106114bc576114bc612a00565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561153f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156391906128c4565b8160018151811061157657611576612a00565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050919050565b5f6115bf8361215f565b509050805f815181106115d4576115d4612a00565b6020026020010151825f815181106115ee576115ee612a00565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508060018151811061163b5761163b612a00565b60200260200101518260018151811061165657611656612a00565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505050919050565b5f806116a0611340565b6040517f666e1b3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063666e1b3990602401602060405180830381865afa15801561170c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061173091906128c4565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60408051610180810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810191909152602082015182516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201525f92839216906370a0823190602401602060405180830381865afa158015611822573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061184691906128df565b604085810151865191517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116906370a0823190602401602060405180830381865afa1580156118b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118db91906128df565b915091505f805f805f8860800151876118f49190612aae565b90505f8960600151876119079190612aae565b90508181101561196d578960200151955089604001519450611939818b6080015160026119349190612aae565b61227b565b61194460028a612af2565b61194e9190612b05565b9350611966848861195f828c612b05565b60016122cb565b92506119b9565b8960400151955089602001519450611990828b6060015160026119349190612aae565b61199b600289612af2565b6119a59190612b05565b93506119b6848961195f828b612b05565b92505b6040518061018001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200161012c42611a339190612b18565b63ffffffff1681526020018b60a0015181526020015f81526020017ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677581526020016001151581526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc981526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc981525098505050505050505050919050565b60408051610180810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101919091526060806060611b448761013e565b611b7a576040517fefc869b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611b858961215f565b915091505f8160400151806020019051810190611ba29190612b3c565b9050611c836040518060c001604052808c73ffffffffffffffffffffffffffffffffffffffff168152602001855f81518110611be057611be0612a00565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16815260200185600181518110611c1657611c16612a00565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681526020018b8b6001818110611c4c57611c4c612a00565b9050602002013581526020018b8b5f818110611c6a57611c6a612a00565b9050602002013581526020018360a0015181525061174e565b96505f739008d19f58aabd9ed0d60971565aa8510560ab4173ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d0791906128df565b9050807fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48989604051602001611d3c9190612a2d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181525f60608401818152608085018452845260208085018a9052835180820185529182528484019190915291519092611da092909101612bf4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611dde94939291602401612c9d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5fd7e97d000000000000000000000000000000000000000000000000000000001790528151600180825281840190935292975082015b60408051606080820183525f808352602083015291810191909152815260200190600190039081611e685790505060408051606081018252855173ffffffffffffffffffffffffffffffffffffffff1681525f602082015291985081018c611f558b857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090910180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a0822091526040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60405173ffffffffffffffffffffffffffffffffffffffff90921660248301526044820152606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f30f73c99000000000000000000000000000000000000000000000000000000001790529052875188905f9061200757612007612a00565b602090810291909101015260408051600180825281830190925290816020015b60408051606080820183525f8083526020830152918101919091528152602001906001900390816120275790505095506040518060600160405280845f015173ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020018c5f801b6040516024016120bd92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f30f73c99000000000000000000000000000000000000000000000000000000001790529052865187905f9061214757612147612a00565b60200260200101819052505050505093509350935093565b60408051606081810183525f80835260208301529181018290526121828361050c565b80602001905181019061219591906128f6565b90505f81604001518060200190518101906121b09190612b3c565b6040805160028082526060820183529293509190602083019080368337019050509250805f0151835f815181106121e9576121e9612a00565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080602001518360018151811061223b5761223b612a00565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505050915091565b5f815f036122945761228d8284612af2565b90506122c5565b82156122c057816122a6600185612b05565b6122b09190612af2565b6122bb906001612ccd565b6122c2565b5f5b90505b92915050565b5f806122d886868661231a565b90506122e383612412565b80156122fe57505f84806122f9576122f9612ac5565b868809115b156123115761230e600182612ccd565b90505b95945050505050565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f0361236d5783828161236357612363612ac5565b049250505061240b565b8084116123a6576040517f227bc15300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b5f600282600381111561242757612427612ce0565b6124319190612d0d565b60ff166001149050919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461245f575f80fd5b50565b5f60208284031215612472575f80fd5b813561240b8161243e565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6122c2602083018461247d565b5f805f604084860312156124ed575f80fd5b83356124f88161243e565b9250602084013567ffffffffffffffff80821115612514575f80fd5b818601915086601f830112612527575f80fd5b813581811115612535575f80fd5b8760208260051b8501011115612549575f80fd5b6020830194508093505050509250925092565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161259d602084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408101516125c5604084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606081015160608301526080810151608083015260a08101516125f160a084018263ffffffff169052565b5060c081015160c083015260e081015160e0830152610100808201518184015250610120808201516126268285018215159052565b5050610140818101519083015261016090810151910152565b5f82825180855260208086019550808260051b8401018186015f5b848110156126dc578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00189528151805173ffffffffffffffffffffffffffffffffffffffff16845284810151858501526040908101516060918501829052906126c88186018361247d565b9a86019a945050509083019060010161265a565b5090979650505050505050565b5f6101e06126f7838861255c565b8061018084015261270a8184018761263f565b90508281036101a084015261271f818661263f565b90508281036101c0840152610501818561247d565b602080825282518282018190525f9190848201906040850190845b8181101561278157835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161274f565b50909695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156127dd576127dd61278d565b60405290565b5f82601f8301126127f2575f80fd5b815167ffffffffffffffff8082111561280d5761280d61278d565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156128535761285361278d565b8160405283815286602085880101111561286b575f80fd5b8360208701602083015e5f602085830101528094505050505092915050565b5f6020828403121561289a575f80fd5b815167ffffffffffffffff8111156128b0575f80fd5b6128bc848285016127e3565b949350505050565b5f602082840312156128d4575f80fd5b815161240b8161243e565b5f602082840312156128ef575f80fd5b5051919050565b5f60208284031215612906575f80fd5b815167ffffffffffffffff8082111561291d575f80fd5b9083019060608286031215612930575f80fd5b60405160608101818110838211171561294b5761294b61278d565b60405282516129598161243e565b815260208381015190820152604083015182811115612976575f80fd5b612982878286016127e3565b60408301525095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8151168252602081015160208301525f6040820151606060408501526128bc606085018261247d565b602081525f6122c26020830184612991565b5f602082840312156129f1575f80fd5b8151801515811461240b575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61018081016122c5828461255c565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008360601b1681525f82518060208501601485015e5f92016014019182525092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820281158282048414176122c5576122c5612a81565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612b0057612b00612ac5565b500490565b818103818111156122c5576122c5612a81565b63ffffffff818116838216019080821115612b3557612b35612a81565b5092915050565b5f60208284031215612b4c575f80fd5b815167ffffffffffffffff80821115612b63575f80fd5b9083019060c08286031215612b76575f80fd5b612b7e6127ba565b8251612b898161243e565b81526020830151612b998161243e565b6020820152604083810151908201526060830151612bb68161243e565b6060820152608083015182811115612bcc575f80fd5b612bd8878286016127e3565b60808301525060a083015160a082015280935050505092915050565b602080825282516060838301528051608084018190525f9291820190839060a08601905b80831015612c385783518252928401926001929092019190840190612c18565b508387015193507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0925082868203016040870152612c768185612991565b93505050604085015181858403016060860152612c93838261247d565b9695505050505050565b848152836020820152608060408201525f612cbb608083018561247d565b8281036060840152610501818561247d565b808201808211156122c5576122c5612a81565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff831680612d1f57612d1f612ac5565b8060ff8416069150509291505056fe000000000000000000000000000000000000000000000000000000000000002000000000000000000000000034323b933096534e43958f6c7bf44f2bb59424dac5a0e756ac88c1d3a4c41900d977fe93c2d34fc95a00ca3e84eb4c6b50faf949000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000005afe3855358e112b5647b952709e6165e1c1eeee000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000573cc0c800048f94e022463b9214d92c2d65e97b00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c8900000000000000000000000000000000000000000000000000000000000000200000000000000000000000002e7e978da0c53404a8cf66ed4ba2c7706c07b62a0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a851d85c99996d84d25387bc0d01e50e3ea814f64e7e04a3b949a571789e196c5a910000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000200000000000000000000000006a023ccd1ff6f2045c3309768ead9e68f978f6e1000000000000000000000000e91d153e0b41518a2ce8dd3d7944fa863463a97d000000000000000000000000000000000000000000000000000affd9fdeb8e08000000000000000000000000d3a84895080609e1163c80b2bd65736db1b86bec00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c890000000000000000000000000000000000000000000000000000000000000020a99fd9950b5d5dceeaf4939e221dca8ca9b938ab0001000000000000000000250000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a85178a729ee3008c7d48832d02267b72e5f34ada8f554a6731a368f01590ed71b34000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000cb444e90d8198415266c6a2724b7900fb12fc56e000000000000000000000000e91d153e0b41518a2ce8dd3d7944fa863463a97d0000000000000000000000000000000000000000000000008156197a5425c0c8000000000000000000000000bd91a72dc3d9b5d9b16ee8638da1fc65311bd90a00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c890000000000000000000000000000000000000000000000000000000000000080000000000000000000000000ab70bcb260073d036d1660201e9d5405f5829b7a000000000000000000000000678df3415fc31947da4324ec63212874be5a82f8000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a8512e31981e34960969eb549f5e826cf77f655e72b03603ad574a79fd015f4de4de0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000200000000000000000000000006c76971f98945ae98dd7d4dfca8711ebea946ea6000000000000000000000000af204776c7245bf4147c2612bf6e5972ee483701000000000000000000000000000000000000000000000000000a16c95a4d2e3c000000000000000000000000d3a84895080609e1163c80b2bd65736db1b86bec00000000000000000000000000000000000000000000000000000000000000c0ce9e05c2aee5f22f9941c4cd1f1a1d13194b109779422d5ad9a980157bd0f1640000000000000000000000000000000000000000000000000000000000000020bc2acf5e821c5c9f8667a36bb1131dad26ed64f90002000000000000000000630000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a851a2029fbb545978d05378b6df19e3754fe5ed2d0ba1e051027503934372f7beb20000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000200000000000000000000000009c58bacc331c9aa871afd802db6379a98e80cedb000000000000000000000000177127622c4a00f3d409b75571e12cb3c8973d3c0000000000000000000000000000000000000000000000000052ba9efc38441a000000000000000000000000d3a84895080609e1163c80b2bd65736db1b86bec00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c89000000000000000000000000000000000000000000000000000000000000002021d4c792ea7e38e0d0819c2011a2b1cb7252bd9900020000000000000000001e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000034323b933096534e43958f6c7bf44f2bb59424daca44b6a304baa16d11b6db07066c1276b1273ee3f94590bbd03201a61882af9a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000098cb76000000000000000000000000573cc0c800048f94e022463b9214d92c2d65e97b00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c890000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a85159457ac6201da7713efecd84618c7a168e88b9cb7d1c0db128af1efe0a08bbb10000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000200000000000000000000000006c76971f98945ae98dd7d4dfca8711ebea946ea6000000000000000000000000af204776c7245bf4147c2612bf6e5972ee483701000000000000000000000000000000000000000000000000000a17273fc14b64000000000000000000000000d3a84895080609e1163c80b2bd65736db1b86bec00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c890000000000000000000000000000000000000000000000000000000000000020bc2acf5e821c5c9f8667a36bb1131dad26ed64f9000200000000000000000063000000000000000000000000000000000000000000000000000000000000002000000000000000000000000034323b933096534e43958f6c7bf44f2bb59424da80ba533f014ef4238ab7ad203c0aeacbf30a71c0346140db77c43ae3121afadd000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000aea46a60368a7bd060eec7df8cba43b7ef41ad85000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000336632e53c8ecf04000000000000000000000000573cc0c800048f94e022463b9214d92c2d65e97b00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c8900000000000000000000000000000000000000000000000000000000000000200000000000000000000000004042a04c54ef133ac2a3c93db69d43c6c02a330b0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a851d67c9fb87045e07da94c81de035b5c7f435cd46568fca02aa35d709bbc9e21fa0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000200000000000000000000000008e5bbbb09ed1ebde8674cda39a0c169401db4252000000000000000000000000e91d153e0b41518a2ce8dd3d7944fa863463a97d0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000e089049027b95c2745d1a954bc1d245352d884e900000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c8900000000000000000000000000000000000000000000000000000000000000200000000000000000000000008db8870ca4b8ac188c4d1a014f34a381ae27e1c20000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a851209c17d9ebe3ac7352795f7f8b3d14d253d92430831d3b2c3965f9a578da7618000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e91d153e0b41518a2ce8dd3d7944fa863463a97d0000000000000000000000006c76971f98945ae98dd7d4dfca8711ebea946ea60000000000000000000000000000000000000000000000008aa3a52815262f58000000000000000000000000bd91a72dc3d9b5d9b16ee8638da1fc65311bd90a00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c8900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000064ac007ff665cf8d0d3af5e0ad1c26a3f853ea000000000000000000000000a767f745331d267c7751297d982b050c93985627000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a85105416460deb76d57af601be17e777b93592d8d4d4a4096c57876a91c84f418080000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000200000000000000000000000009c58bacc331c9aa871afd802db6379a98e80cedb000000000000000000000000ce11e14225575945b8e6dc0d4f2dd4c570f79d9f000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000009634ca647474b6b78d3382331a77cd00a8a940da00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000034323b933096534e43958f6c7bf44f2bb59424da932542294ff270a8bbdbe1fb921de3d09c9749dc35627361fc17c44b9b026b810000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000200000000000000000000000008390a1da07e376ef7add4be859ba74fb83aa02d5000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000aec1c94998000000000000000000000000573cc0c800048f94e022463b9214d92c2d65e97b00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c89000000000000000000000000000000000000000000000000000000000000002000000000000000000000000069c66beafb06674db41b22cfc50c34a93b8d82a2000000000000000000000000000000000000000000000000000000000000002000000000000000000000000034323b933096534e43958f6c7bf44f2bb59424da0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000def1ca1fb7fbcdc777520aa7f396b4e015f497ab000000000000000000000000000000000000000000000000025bf6196bd10000000000000000000000000000ad37fe3ddedf8cdee1022da1b17412cfb649559600000000000000000000000000000000000000000000000000000000000000c0d661a16b0e85eadb705cf5158132b5dd1ebc0a49929ef68097698d15e2a4e3b40000000000000000000000000000000000000000000000000000000000000020de8c195aa41c11a0c4787372defbbddaa31306d20002000000000000000001810000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a851560d33bcc26b7f10765f8ae10b1abc4ed265ba0c7a1f9948d06de97c31044aee0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000200000000000000000000000004d18815d14fe5c3304e87b3fa18318baa5c238200000000000000000000000009c58bacc331c9aa871afd802db6379a98e80cedb0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000d3a84895080609e1163c80b2bd65736db1b86bec00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a9b2234773cc6a4f3a34a770c52c931cba5c24b20002000000000000000000870000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a851437a72b19b25e8b62fdfb81146ec83c66462138d3d9e08998594853566fa9add000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000177127622c4a00f3d409b75571e12cb3c8973d3c0000000000000000000000006c76971f98945ae98dd7d4dfca8711ebea946ea600000000000000000000000000000000000000000000000146e114355e0f6088000000000000000000000000d3a84895080609e1163c80b2bd65736db1b86bec00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c8900000000000000000000000000000000000000000000000000000000000000204cdabe9e07ca393943acfb9286bbbd0d0a310ff600020000000000000000005c000000000000000000000000000000000000000000000000000000000000002000000000000000000000000034323b933096534e43958f6c7bf44f2bb59424da559d5fda20be80608e4d5ea1b41e6b9330efca7934beb094281dd4d8f4889374000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000079ef7f110fdfae4000000000000000000000000ad37fe3ddedf8cdee1022da1b17412cfb649559600000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c890000000000000000000000000000000000000000000000000000000000000020e99481dc77691d8e2456e5f3f61c1810adfc1503000200000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000034323b933096534e43958f6c7bf44f2bb59424da56871afb17e444c418900f6db3e1ade07d49eadea1accf03fcebc0a6e7e4b653000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b2617246d0c6c0087f18703d576831899ca94f01000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000048bcb79dba2b56b90000000000000000000000000573cc0c800048f94e022463b9214d92c2d65e97b00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c890000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b36ec83d844c0579ec2493f10b2087e96bb654600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a8511ea56ac96a6369d36ef3fe56ae0ddff8d0cc89e1623095239c5ceed2505aa2810000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000200000000000000000000000009c58bacc331c9aa871afd802db6379a98e80cedb0000000000000000000000006a023ccd1ff6f2045c3309768ead9e68f978f6e1000000000000000000000000000000000000000000000000006b43c27d2e8300000000000000000000000000e089049027b95c2745d1a954bc1d245352d884e900000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c89000000000000000000000000000000000000000000000000000000000000002000000000000000000000000028dbd35fd79f48bfa9444d330d14683e7101d8170000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a851d1e868d120e326e5581caa39852bb0da9234a511ed76e6f7a9dcceb0d5f154c70000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000200000000000000000000000006c76971f98945ae98dd7d4dfca8711ebea946ea6000000000000000000000000af204776c7245bf4147c2612bf6e5972ee48370100000000000000000000000000000000000000000000000000098e46995425ca000000000000000000000000d3a84895080609e1163c80b2bd65736db1b86bec00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c890000000000000000000000000000000000000000000000000000000000000020bc2acf5e821c5c9f8667a36bb1131dad26ed64f90002000000000000000000630000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a851f0e8ec512b2507dae99175a0a4792d8a53e0863fbb5e735a5c993295bbd17f480000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000200000000000000000000000006c76971f98945ae98dd7d4dfca8711ebea946ea60000000000000000000000009c58bacc331c9aa871afd802db6379a98e80cedb00000000000000000000000000000000000000000000000000094f8d9168e271000000000000000000000000d3a84895080609e1163c80b2bd65736db1b86bec00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c8900000000000000000000000000000000000000000000000000000000000000204683e340a8049261057d5ab1b29c8d840e75695e00020000000000000000005a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000034323b933096534e43958f6c7bf44f2bb59424dad003838829115f5d9ff3ed69c8d2b4b26e10eb1a79331206c28fbb4734390a5e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000808507121b80c02388fad14726482e061b8da827000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000189b23422a9b84d8000000000000000000000000ad37fe3ddedf8cdee1022da1b17412cfb649559600000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c890000000000000000000000000000000000000000000000000000000000000020fd1cf6fd41f229ca86ada0584c63c49c3d66bbc90002000000000000000004380000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a8513956efd63537b00bb3b152d3c4961207b6ca14d6f506c66fc0aef4c8e2e176b5000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000cb444e90d8198415266c6a2724b7900fb12fc56e0000000000000000000000009c58bacc331c9aa871afd802db6379a98e80cedb000000000000000000000000000000000000000000000000000000000000004500000000000000000000000015b4c67070d3748b8ec93c8a32f7efe2e8f684c900000000000000000000000000000000000000000000000000000000000000c0056e9806d953dbe2df4352a90ad2c1148c51460e941107f0909fae382b1661cf000000000000000000000000000000000000000000000000000000000000004000000000000000000000000022441d81416430a54336ab28765abd31a792ad37000000000000000000000000ab70bcb260073d036d1660201e9d5405f5829b7a0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b148f40fff05b5ce6b22752cf8e454b556f7a85133f583d55c4509d5e10ebe3c7c69bce17af4c57419d6c9c90c8f588dd3232c0d000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000af204776c7245bf4147c2612bf6e5972ee4837010000000000000000000000006c76971f98945ae98dd7d4dfca8711ebea946ea600000000000000000000000000000000000000000000000410d586a20a4c0000000000000000000000000000d3a84895080609e1163c80b2bd65736db1b86bec00000000000000000000000000000000000000000000000000000000000000c04d821ddc9d656177dad4d5c2f76a4bff2ed514ff69fa4aa4fd869d6e98d55c890000000000000000000000000000000000000000000000000000000000000020bc2acf5e821c5c9f8667a36bb1131dad26ed64f9000200000000000000000063a2646970667358221220c3b6b701e7d5db53232efcebe1fe1bdd40a35653449ba7cd10551b9e5bf6a94a64736f6c63430008190033",
@@ -1079,5 +1022,64 @@
},
"version": 1
},
- "id": 126
+ "id": 126,
+ "_disabled": [
+ {
+ "type": "function",
+ "name": "getSnapshot",
+ "inputs": [
+ {
+ "name": "amm",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "isLegacy",
+ "inputs": [
+ {
+ "name": "amm",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "isLegacyEnabled",
+ "inputs": [
+ {
+ "name": "amm",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "success",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ]
}
diff --git a/crates/contracts/artifacts/CowAmmUniswapV2PriceOracle.json b/contracts/artifacts/CowAmmUniswapV2PriceOracle.json
similarity index 99%
rename from crates/contracts/artifacts/CowAmmUniswapV2PriceOracle.json
rename to contracts/artifacts/CowAmmUniswapV2PriceOracle.json
index c232352da2..0016f79051 100644
--- a/crates/contracts/artifacts/CowAmmUniswapV2PriceOracle.json
+++ b/contracts/artifacts/CowAmmUniswapV2PriceOracle.json
@@ -1,40 +1,5 @@
{
- "abi": [
- {
- "type": "function",
- "name": "getPrice",
- "inputs": [
- {
- "name": "token0",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "token1",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "data",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [
- {
- "name": "priceNumerator",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "priceDenominator",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "stateMutability": "view"
- }
- ],
+ "abi": [],
"bytecode": "0x6080604052348015600e575f80fd5b506105468061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063355efdd91461002d575b5f80fd5b61004061003b366004610386565b610059565b6040805192835260208301919091520160405180910390f35b5f808061006884860186610411565b9050805f015173ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156100b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100da91906104a2565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080935081945050505f815f015173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610156573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017a91906104ee565b90505f825f015173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ed91906104ee565b90508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff160361022757929392905b8173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146102c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f7261636c653a20696e76616c696420746f6b656e300000000000000000000060448201526064015b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f7261636c653a20696e76616c696420746f6b656e310000000000000000000060448201526064016102b8565b50505094509492505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610383575f80fd5b50565b5f805f8060608587031215610399575f80fd5b84356103a481610362565b935060208501356103b481610362565b9250604085013567ffffffffffffffff808211156103d0575f80fd5b818701915087601f8301126103e3575f80fd5b8135818111156103f1575f80fd5b886020828501011115610402575f80fd5b95989497505060200194505050565b5f60208284031215610421575f80fd5b6040516020810181811067ffffffffffffffff82111715610469577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604052823561047781610362565b81529392505050565b80516dffffffffffffffffffffffffffff8116811461049d575f80fd5b919050565b5f805f606084860312156104b4575f80fd5b6104bd84610480565b92506104cb60208501610480565b9150604084015163ffffffff811681146104e3575f80fd5b809150509250925092565b5f602082840312156104fe575f80fd5b815161050981610362565b939250505056fea26469706673582212201fe6ad4d6b89d204db5394bdedef23d10ed8c7e4f83be4c5fe14dcc09470223464736f6c63430008190033",
"deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063355efdd91461002d575b5f80fd5b61004061003b366004610386565b610059565b6040805192835260208301919091520160405180910390f35b5f808061006884860186610411565b9050805f015173ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156100b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100da91906104a2565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080935081945050505f815f015173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610156573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017a91906104ee565b90505f825f015173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ed91906104ee565b90508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff160361022757929392905b8173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146102c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f7261636c653a20696e76616c696420746f6b656e300000000000000000000060448201526064015b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f7261636c653a20696e76616c696420746f6b656e310000000000000000000060448201526064016102b8565b50505094509492505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610383575f80fd5b50565b5f805f8060608587031215610399575f80fd5b84356103a481610362565b935060208501356103b481610362565b9250604085013567ffffffffffffffff808211156103d0575f80fd5b818701915087601f8301126103e3575f80fd5b8135818111156103f1575f80fd5b886020828501011115610402575f80fd5b95989497505060200194505050565b5f60208284031215610421575f80fd5b6040516020810181811067ffffffffffffffff82111715610469577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604052823561047781610362565b81529392505050565b80516dffffffffffffffffffffffffffff8116811461049d575f80fd5b919050565b5f805f606084860312156104b4575f80fd5b6104bd84610480565b92506104cb60208501610480565b9150604084015163ffffffff811681146104e3575f80fd5b809150509250925092565b5f602082840312156104fe575f80fd5b815161050981610362565b939250505056fea26469706673582212201fe6ad4d6b89d204db5394bdedef23d10ed8c7e4f83be4c5fe14dcc09470223464736f6c63430008190033",
"methodIdentifiers": {
@@ -171,5 +136,41 @@
},
"version": 1
},
- "id": 178
+ "id": 178,
+ "_disabled": [
+ {
+ "type": "function",
+ "name": "getPrice",
+ "inputs": [
+ {
+ "name": "token0",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "token1",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "priceNumerator",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "priceDenominator",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ]
}
diff --git a/crates/contracts/artifacts/CowProtocolToken.json b/contracts/artifacts/CowProtocolToken.json
similarity index 99%
rename from crates/contracts/artifacts/CowProtocolToken.json
rename to contracts/artifacts/CowProtocolToken.json
index 50679b3be3..6e7084fb0c 100644
--- a/crates/contracts/artifacts/CowProtocolToken.json
+++ b/contracts/artifacts/CowProtocolToken.json
@@ -99,32 +99,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [],
- "name": "MAX_YEARLY_INFLATION",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "TIME_BETWEEN_MINTINGS",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -192,19 +166,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [],
- "name": "cowDao",
- "outputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [],
"name": "decimals",
@@ -218,78 +179,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "subtractedValue",
- "type": "uint256"
- }
- ],
- "name": "decreaseAllowance",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "offset",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "length",
- "type": "uint256"
- }
- ],
- "name": "getStorageAt",
- "outputs": [
- {
- "internalType": "bytes",
- "name": "",
- "type": "bytes"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "addedValue",
- "type": "uint256"
- }
- ],
- "name": "increaseAllowance",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -407,38 +296,83 @@
"stateMutability": "nonpayable",
"type": "function"
},
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
{
"inputs": [
{
"internalType": "address",
- "name": "targetContract",
+ "name": "recipient",
"type": "address"
},
{
- "internalType": "bytes",
- "name": "calldataPayload",
- "type": "bytes"
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
}
],
- "name": "simulateDelegatecallInternal",
+ "name": "transfer",
"outputs": [
{
- "internalType": "bytes",
- "name": "response",
- "type": "bytes"
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x6101806040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c96101405260006006553480156200003c57600080fd5b5060405162002122380380620021228339810160408190526200005f916200035f565b8282826040518060400160405280601281526020017121b7ab90283937ba37b1b7b6102a37b5b2b760711b81525060405180604001604052806003815260200162434f5760e81b8152508180604051806040016040528060018152602001603160f81b81525084848160039080519060200190620000df9291906200029c565b508051620000f59060049060208401906200029c565b5050825160209384012082519284019290922060e08390526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818901819052818301979097526060810194909452608080850193909352308483018190528151808603909301835260c09485019091528151919096012090529290925261012052506200019590508584620001b4565b5050506001600160a01b03166101605250504260065550620004049050565b6001600160a01b0382166200020f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620002239190620003a0565b90915550506001600160a01b0382166000908152602081905260408120805483929062000252908490620003a0565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620002aa90620003c7565b90600052602060002090601f016020900481019282620002ce576000855562000319565b82601f10620002e957805160ff191683800117855562000319565b8280016001018555821562000319579182015b8281111562000319578251825591602001919060010190620002fc565b50620003279291506200032b565b5090565b5b808211156200032757600081556001016200032c565b80516001600160a01b03811681146200035a57600080fd5b919050565b6000806000606084860312156200037557600080fd5b620003808462000342565b9250620003906020850162000342565b9150604084015190509250925092565b60008219821115620003c257634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620003dc57607f821691505b60208210811415620003fe57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610120516101405161016051611cb1620004716000396000818161033a01526105a10152600061096401526000611135015260006111840152600061115f015260006110b8015260006110e20152600061110c0152611cb16000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806370a08231116100d8578063cd42dcbe1161008c578063e2d5148911610066578063e2d5148914610335578063f84436bd14610381578063fde9e07a1461039457600080fd5b8063cd42dcbe146102d1578063d505accf146102dc578063dd62ed3e146102ef57600080fd5b806395d89b41116100bd57806395d89b41146102a3578063a457c2d7146102ab578063a9059cbb146102be57600080fd5b806370a082311461025a5780637ecebe001461029057600080fd5b80633644e5151161013a57806343218e191161011457806343218e191461022c5780635624b25b1461023f5780635862bf3d1461025257600080fd5b80633644e515146101fc578063395093511461020457806340c10f191461021757600080fd5b806318160ddd1161016b57806318160ddd146101c857806323b872dd146101da578063313ce567146101ed57600080fd5b806306fdde0314610187578063095ea7b3146101a5575b600080fd5b61018f61039d565b60405161019c91906117aa565b60405180910390f35b6101b86101b33660046117ed565b61042f565b604051901515815260200161019c565b6002545b60405190815260200161019c565b6101b86101e8366004611817565b610446565b6040516012815260200161019c565b6101cc610531565b6101b86102123660046117ed565b610540565b61022a6102253660046117ed565b610589565b005b61018f61023a366004611882565b6106af565b61018f61024d366004611962565b610751565b6101cc600381565b6101cc610268366004611984565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101cc61029e366004611984565b6107d7565b61018f610802565b6101b86102b93660046117ed565b610811565b6101b86102cc3660046117ed565b6108e9565b6101cc6301e1338081565b61022a6102ea36600461199f565b6108f6565b6101cc6102fd366004611a12565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019c565b61018f61038f366004611882565b610ab5565b6101cc60065481565b6060600380546103ac90611a45565b80601f01602080910402602001604051908101604052809291908181526020018280546103d890611a45565b80156104255780601f106103fa57610100808354040283529160200191610425565b820191906000526020600020905b81548152906001019060200180831161040857829003601f168201915b5050505050905090565b600061043c338484610c36565b5060015b92915050565b6000610453848484610de9565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105268533858403610c36565b506001949350505050565b600061053b61109e565b905090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161043c918590610584908690611ac2565b610c36565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105f8576040517ffe72c36e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6064600361060560025490565b61060f9190611ada565b6106199190611b17565b811115610652576040517f2c6af20800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426301e133806006546106659190611ac2565b111561069d576040517f7b06471500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426006556106ab82826111d2565b5050565b606060008373ffffffffffffffffffffffffffffffffffffffff16836040516106d89190611b52565b600060405180830381855af49150503d8060008114610713576040519150601f19603f3d011682016040523d82523d6000602084013e610718565b606091505b5060405190935090915061074a906107369084908490602001611b6e565b6040516020818303038152906040526112f2565b5092915050565b60606000610760836020611ada565b67ffffffffffffffff81111561077857610778611853565b6040519080825280601f01601f1916602001820160405280156107a2576020820181803683370190505b50905060005b838110156107cf5784810154602080830284010152806107c781611b96565b9150506107a8565b509392505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260056020526040812054610440565b6060600480546103ac90611a45565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156108d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610510565b6108df3385858403610c36565b5060019392505050565b600061043c338484610de9565b83421115610960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610510565b60007f000000000000000000000000000000000000000000000000000000000000000088888861098f8c6112fa565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006109f78261132f565b90506000610a0782878787611398565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610510565b610aa98a8a8a610c36565b50505050505050505050565b606060006343218e1960e01b8484604051602401610ad4929190611bcf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290519091503090610b63908390611b52565b6000604051808303816000865af19150503d8060008114610ba0576040519150601f19603f3d011682016040523d82523d6000602084013e610ba5565b606091505b5090508092505060008260018451610bbd9190611c06565b81518110610bcd57610bcd611c1d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b149050610c188360018551610c149190611c06565b9052565b8015610c25575050610440565b610c2e836112f2565b505092915050565b73ffffffffffffffffffffffffffffffffffffffff8316610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610510565b73ffffffffffffffffffffffffffffffffffffffff8216610d7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610510565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610510565b73ffffffffffffffffffffffffffffffffffffffff8216610f2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610510565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610fe5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610510565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290611029908490611ac2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108f91815260200190565b60405180910390a35b50505050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561110457507f000000000000000000000000000000000000000000000000000000000000000046145b1561112e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b73ffffffffffffffffffffffffffffffffffffffff821661124f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610510565b80600260008282546112619190611ac2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061129b908490611ac2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090208054600181018255905b50919050565b600061044061133c61109e565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006113a9878787876113c0565b915091506113b6816114d8565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156113f757506000905060036114cf565b8460ff16601b1415801561140f57508460ff16601c14155b1561142057506000905060046114cf565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611474573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166114c8576000600192509250506114cf565b9150600090505b94509492505050565b60008160048111156114ec576114ec611c4c565b14156114f55750565b600181600481111561150957611509611c4c565b1415611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610510565b600281600481111561158557611585611c4c565b14156115ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610510565b600381600481111561160157611601611c4c565b141561168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610510565b60048160048111156116a3576116a3611c4c565b1415611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610510565b50565b60005b8381101561174f578181015183820152602001611737565b838111156110985750506000910152565b60008151808452611778816020860160208601611734565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006117bd6020830184611760565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146117e857600080fd5b919050565b6000806040838503121561180057600080fd5b611809836117c4565b946020939093013593505050565b60008060006060848603121561182c57600080fd5b611835846117c4565b9250611843602085016117c4565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561189557600080fd5b61189e836117c4565b9150602083013567ffffffffffffffff808211156118bb57600080fd5b818501915085601f8301126118cf57600080fd5b8135818111156118e1576118e1611853565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561192757611927611853565b8160405282815288602084870101111561194057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806040838503121561197557600080fd5b50508035926020909101359150565b60006020828403121561199657600080fd5b6117bd826117c4565b600080600080600080600060e0888a0312156119ba57600080fd5b6119c3886117c4565b96506119d1602089016117c4565b95506040880135945060608801359350608088013560ff811681146119f557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611a2557600080fd5b611a2e836117c4565b9150611a3c602084016117c4565b90509250929050565b600181811c90821680611a5957607f821691505b60208210811415611329577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611ad557611ad5611a93565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b1257611b12611a93565b500290565b600082611b4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008251611b64818460208701611734565b9190910192915050565b60008351611b80818460208801611734565b92151560f81b9190920190815260010192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611bc857611bc8611a93565b5060010190565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000611bfe6040830184611760565b949350505050565b600082821015611c1857611c18611a93565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220530954a1b40a0e3c6d45330c16c5bf384a847ba06bf8ebbb9afdfb09ada68c0b64736f6c634300080a0033",
+ "_disabled": [
{
"inputs": [],
- "name": "symbol",
+ "name": "MAX_YEARLY_INFLATION",
"outputs": [
{
- "internalType": "string",
+ "internalType": "uint256",
"name": "",
- "type": "string"
+ "type": "uint256"
}
],
"stateMutability": "view",
@@ -446,7 +380,7 @@
},
{
"inputs": [],
- "name": "timestampLastMinting",
+ "name": "TIME_BETWEEN_MINTINGS",
"outputs": [
{
"internalType": "uint256",
@@ -459,12 +393,12 @@
},
{
"inputs": [],
- "name": "totalSupply",
+ "name": "cowDao",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "address",
"name": "",
- "type": "uint256"
+ "type": "address"
}
],
"stateMutability": "view",
@@ -474,16 +408,16 @@
"inputs": [
{
"internalType": "address",
- "name": "recipient",
+ "name": "spender",
"type": "address"
},
{
"internalType": "uint256",
- "name": "amount",
+ "name": "subtractedValue",
"type": "uint256"
}
],
- "name": "transfer",
+ "name": "decreaseAllowance",
"outputs": [
{
"internalType": "bool",
@@ -497,22 +431,41 @@
{
"inputs": [
{
- "internalType": "address",
- "name": "sender",
- "type": "address"
+ "internalType": "uint256",
+ "name": "offset",
+ "type": "uint256"
},
+ {
+ "internalType": "uint256",
+ "name": "length",
+ "type": "uint256"
+ }
+ ],
+ "name": "getStorageAt",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
{
"internalType": "address",
- "name": "recipient",
+ "name": "spender",
"type": "address"
},
{
"internalType": "uint256",
- "name": "amount",
+ "name": "addedValue",
"type": "uint256"
}
],
- "name": "transferFrom",
+ "name": "increaseAllowance",
"outputs": [
{
"internalType": "bool",
@@ -522,7 +475,56 @@
],
"stateMutability": "nonpayable",
"type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "targetContract",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "calldataPayload",
+ "type": "bytes"
+ }
+ ],
+ "name": "simulateDelegatecallInternal",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "response",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "timestampLastMinting",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
}
- ],
- "bytecode": "0x6101806040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c96101405260006006553480156200003c57600080fd5b5060405162002122380380620021228339810160408190526200005f916200035f565b8282826040518060400160405280601281526020017121b7ab90283937ba37b1b7b6102a37b5b2b760711b81525060405180604001604052806003815260200162434f5760e81b8152508180604051806040016040528060018152602001603160f81b81525084848160039080519060200190620000df9291906200029c565b508051620000f59060049060208401906200029c565b5050825160209384012082519284019290922060e08390526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818901819052818301979097526060810194909452608080850193909352308483018190528151808603909301835260c09485019091528151919096012090529290925261012052506200019590508584620001b4565b5050506001600160a01b03166101605250504260065550620004049050565b6001600160a01b0382166200020f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620002239190620003a0565b90915550506001600160a01b0382166000908152602081905260408120805483929062000252908490620003a0565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620002aa90620003c7565b90600052602060002090601f016020900481019282620002ce576000855562000319565b82601f10620002e957805160ff191683800117855562000319565b8280016001018555821562000319579182015b8281111562000319578251825591602001919060010190620002fc565b50620003279291506200032b565b5090565b5b808211156200032757600081556001016200032c565b80516001600160a01b03811681146200035a57600080fd5b919050565b6000806000606084860312156200037557600080fd5b620003808462000342565b9250620003906020850162000342565b9150604084015190509250925092565b60008219821115620003c257634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620003dc57607f821691505b60208210811415620003fe57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610120516101405161016051611cb1620004716000396000818161033a01526105a10152600061096401526000611135015260006111840152600061115f015260006110b8015260006110e20152600061110c0152611cb16000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806370a08231116100d8578063cd42dcbe1161008c578063e2d5148911610066578063e2d5148914610335578063f84436bd14610381578063fde9e07a1461039457600080fd5b8063cd42dcbe146102d1578063d505accf146102dc578063dd62ed3e146102ef57600080fd5b806395d89b41116100bd57806395d89b41146102a3578063a457c2d7146102ab578063a9059cbb146102be57600080fd5b806370a082311461025a5780637ecebe001461029057600080fd5b80633644e5151161013a57806343218e191161011457806343218e191461022c5780635624b25b1461023f5780635862bf3d1461025257600080fd5b80633644e515146101fc578063395093511461020457806340c10f191461021757600080fd5b806318160ddd1161016b57806318160ddd146101c857806323b872dd146101da578063313ce567146101ed57600080fd5b806306fdde0314610187578063095ea7b3146101a5575b600080fd5b61018f61039d565b60405161019c91906117aa565b60405180910390f35b6101b86101b33660046117ed565b61042f565b604051901515815260200161019c565b6002545b60405190815260200161019c565b6101b86101e8366004611817565b610446565b6040516012815260200161019c565b6101cc610531565b6101b86102123660046117ed565b610540565b61022a6102253660046117ed565b610589565b005b61018f61023a366004611882565b6106af565b61018f61024d366004611962565b610751565b6101cc600381565b6101cc610268366004611984565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101cc61029e366004611984565b6107d7565b61018f610802565b6101b86102b93660046117ed565b610811565b6101b86102cc3660046117ed565b6108e9565b6101cc6301e1338081565b61022a6102ea36600461199f565b6108f6565b6101cc6102fd366004611a12565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61035c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019c565b61018f61038f366004611882565b610ab5565b6101cc60065481565b6060600380546103ac90611a45565b80601f01602080910402602001604051908101604052809291908181526020018280546103d890611a45565b80156104255780601f106103fa57610100808354040283529160200191610425565b820191906000526020600020905b81548152906001019060200180831161040857829003601f168201915b5050505050905090565b600061043c338484610c36565b5060015b92915050565b6000610453848484610de9565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105268533858403610c36565b506001949350505050565b600061053b61109e565b905090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161043c918590610584908690611ac2565b610c36565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105f8576040517ffe72c36e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6064600361060560025490565b61060f9190611ada565b6106199190611b17565b811115610652576040517f2c6af20800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426301e133806006546106659190611ac2565b111561069d576040517f7b06471500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426006556106ab82826111d2565b5050565b606060008373ffffffffffffffffffffffffffffffffffffffff16836040516106d89190611b52565b600060405180830381855af49150503d8060008114610713576040519150601f19603f3d011682016040523d82523d6000602084013e610718565b606091505b5060405190935090915061074a906107369084908490602001611b6e565b6040516020818303038152906040526112f2565b5092915050565b60606000610760836020611ada565b67ffffffffffffffff81111561077857610778611853565b6040519080825280601f01601f1916602001820160405280156107a2576020820181803683370190505b50905060005b838110156107cf5784810154602080830284010152806107c781611b96565b9150506107a8565b509392505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260056020526040812054610440565b6060600480546103ac90611a45565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156108d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610510565b6108df3385858403610c36565b5060019392505050565b600061043c338484610de9565b83421115610960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610510565b60007f000000000000000000000000000000000000000000000000000000000000000088888861098f8c6112fa565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006109f78261132f565b90506000610a0782878787611398565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610510565b610aa98a8a8a610c36565b50505050505050505050565b606060006343218e1960e01b8484604051602401610ad4929190611bcf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290519091503090610b63908390611b52565b6000604051808303816000865af19150503d8060008114610ba0576040519150601f19603f3d011682016040523d82523d6000602084013e610ba5565b606091505b5090508092505060008260018451610bbd9190611c06565b81518110610bcd57610bcd611c1d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b149050610c188360018551610c149190611c06565b9052565b8015610c25575050610440565b610c2e836112f2565b505092915050565b73ffffffffffffffffffffffffffffffffffffffff8316610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610510565b73ffffffffffffffffffffffffffffffffffffffff8216610d7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610510565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610510565b73ffffffffffffffffffffffffffffffffffffffff8216610f2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610510565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610fe5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610510565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290611029908490611ac2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161108f91815260200190565b60405180910390a35b50505050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561110457507f000000000000000000000000000000000000000000000000000000000000000046145b1561112e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b73ffffffffffffffffffffffffffffffffffffffff821661124f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610510565b80600260008282546112619190611ac2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061129b908490611ac2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090208054600181018255905b50919050565b600061044061133c61109e565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006113a9878787876113c0565b915091506113b6816114d8565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156113f757506000905060036114cf565b8460ff16601b1415801561140f57508460ff16601c14155b1561142057506000905060046114cf565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611474573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166114c8576000600192509250506114cf565b9150600090505b94509492505050565b60008160048111156114ec576114ec611c4c565b14156114f55750565b600181600481111561150957611509611c4c565b1415611571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610510565b600281600481111561158557611585611c4c565b14156115ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610510565b600381600481111561160157611601611c4c565b141561168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610510565b60048160048111156116a3576116a3611c4c565b1415611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610510565b50565b60005b8381101561174f578181015183820152602001611737565b838111156110985750506000910152565b60008151808452611778816020860160208601611734565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006117bd6020830184611760565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146117e857600080fd5b919050565b6000806040838503121561180057600080fd5b611809836117c4565b946020939093013593505050565b60008060006060848603121561182c57600080fd5b611835846117c4565b9250611843602085016117c4565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561189557600080fd5b61189e836117c4565b9150602083013567ffffffffffffffff808211156118bb57600080fd5b818501915085601f8301126118cf57600080fd5b8135818111156118e1576118e1611853565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561192757611927611853565b8160405282815288602084870101111561194057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806040838503121561197557600080fd5b50508035926020909101359150565b60006020828403121561199657600080fd5b6117bd826117c4565b600080600080600080600060e0888a0312156119ba57600080fd5b6119c3886117c4565b96506119d1602089016117c4565b95506040880135945060608801359350608088013560ff811681146119f557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611a2557600080fd5b611a2e836117c4565b9150611a3c602084016117c4565b90509250929050565b600181811c90821680611a5957607f821691505b60208210811415611329577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611ad557611ad5611a93565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b1257611b12611a93565b500290565b600082611b4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008251611b64818460208701611734565b9190910192915050565b60008351611b80818460208801611734565b92151560f81b9190920190815260010192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611bc857611bc8611a93565b5060010190565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000611bfe6040830184611760565b949350505050565b600082821015611c1857611c18611a93565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220530954a1b40a0e3c6d45330c16c5bf384a847ba06bf8ebbb9afdfb09ada68c0b64736f6c634300080a0033"
-}
\ No newline at end of file
+ ]
+}
diff --git a/crates/contracts/artifacts/CowSettlementForwarder.json b/contracts/artifacts/CowSettlementForwarder.json
similarity index 100%
rename from crates/contracts/artifacts/CowSettlementForwarder.json
rename to contracts/artifacts/CowSettlementForwarder.json
diff --git a/crates/contracts/artifacts/ERC1271SignatureValidator.json b/contracts/artifacts/ERC1271SignatureValidator.json
similarity index 100%
rename from crates/contracts/artifacts/ERC1271SignatureValidator.json
rename to contracts/artifacts/ERC1271SignatureValidator.json
diff --git a/crates/contracts/artifacts/ERC20.json b/contracts/artifacts/ERC20.json
similarity index 99%
rename from crates/contracts/artifacts/ERC20.json
rename to contracts/artifacts/ERC20.json
index 4b937d123e..028a5b1ce0 100644
--- a/crates/contracts/artifacts/ERC20.json
+++ b/contracts/artifacts/ERC20.json
@@ -147,43 +147,45 @@
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
+ "inputs": [],
+ "name": "name",
+ "outputs": [
{
- "internalType": "uint256",
- "name": "subtractedValue",
- "type": "uint256"
+ "internalType": "string",
+ "name": "",
+ "type": "string"
}
],
- "name": "decreaseAllowance",
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
"outputs": [
{
- "internalType": "bool",
+ "internalType": "string",
"name": "",
- "type": "bool"
+ "type": "string"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
- "name": "spender",
+ "name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
- "name": "addedValue",
+ "name": "amount",
"type": "uint256"
}
],
- "name": "increaseAllowance",
+ "name": "transfer",
"outputs": [
{
"internalType": "bool",
@@ -195,58 +197,50 @@
"type": "function"
},
{
- "inputs": [],
- "name": "name",
- "outputs": [
+ "inputs": [
{
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "symbol",
- "outputs": [
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
{
- "internalType": "string",
- "name": "",
- "type": "string"
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
}
],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "totalSupply",
+ "name": "transferFrom",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "bool",
"name": "",
- "type": "uint256"
+ "type": "bool"
}
],
- "stateMutability": "view",
+ "stateMutability": "nonpayable",
"type": "function"
- },
+ }
+ ],
+ "_disabled": [
{
"inputs": [
{
"internalType": "address",
- "name": "recipient",
+ "name": "spender",
"type": "address"
},
{
"internalType": "uint256",
- "name": "amount",
+ "name": "subtractedValue",
"type": "uint256"
}
],
- "name": "transfer",
+ "name": "decreaseAllowance",
"outputs": [
{
"internalType": "bool",
@@ -261,21 +255,16 @@
"inputs": [
{
"internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "recipient",
+ "name": "spender",
"type": "address"
},
{
"internalType": "uint256",
- "name": "amount",
+ "name": "addedValue",
"type": "uint256"
}
],
- "name": "transferFrom",
+ "name": "increaseAllowance",
"outputs": [
{
"internalType": "bool",
@@ -285,6 +274,19 @@
],
"stateMutability": "nonpayable",
"type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
}
]
-}
\ No newline at end of file
+}
diff --git a/crates/contracts/artifacts/ERC20Mintable.json b/contracts/artifacts/ERC20Mintable.json
similarity index 99%
rename from crates/contracts/artifacts/ERC20Mintable.json
rename to contracts/artifacts/ERC20Mintable.json
index e3eded2cc5..bda0b6acda 100644
--- a/crates/contracts/artifacts/ERC20Mintable.json
+++ b/contracts/artifacts/ERC20Mintable.json
@@ -76,21 +76,6 @@
"name": "Transfer",
"type": "event"
},
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "addMinter",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"constant": true,
"inputs": [
@@ -169,16 +154,16 @@
"inputs": [
{
"internalType": "address",
- "name": "spender",
+ "name": "account",
"type": "address"
},
{
"internalType": "uint256",
- "name": "subtractedValue",
+ "name": "amount",
"type": "uint256"
}
],
- "name": "decreaseAllowance",
+ "name": "mint",
"outputs": [
{
"internalType": "bool",
@@ -195,16 +180,16 @@
"inputs": [
{
"internalType": "address",
- "name": "spender",
+ "name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
- "name": "addedValue",
+ "name": "amount",
"type": "uint256"
}
],
- "name": "increaseAllowance",
+ "name": "transfer",
"outputs": [
{
"internalType": "bool",
@@ -217,32 +202,16 @@
"type": "function"
},
{
- "constant": true,
+ "constant": false,
"inputs": [
{
"internalType": "address",
- "name": "account",
+ "name": "sender",
"type": "address"
- }
- ],
- "name": "isMinter",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
+ },
{
"internalType": "address",
- "name": "account",
+ "name": "recipient",
"type": "address"
},
{
@@ -251,7 +220,7 @@
"type": "uint256"
}
],
- "name": "mint",
+ "name": "transferFrom",
"outputs": [
{
"internalType": "bool",
@@ -262,29 +231,49 @@
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
- },
+ }
+ ],
+ "bytecode": "0x608060405262000024620000186200002a60201b60201c565b6200003260201b60201c565b62000257565b600033905090565b6200004d8160036200009360201b620012a81790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b620000a582826200017760201b60201c565b1562000119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000200576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180620018506022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115e980620002676000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063983b2d5611610071578063983b2d56146102e7578063986502751461032b578063a457c2d714610335578063a9059cbb1461039b578063aa271e1a14610401578063dd62ed3e1461045d576100b4565b8063095ea7b3146100b957806318160ddd1461011f57806323b872dd1461013d57806339509351146101c357806340c10f191461022957806370a082311461028f575b600080fd5b610105600480360360408110156100cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104d5565b604051808215151515815260200191505060405180910390f35b6101276104f3565b6040518082815260200191505060405180910390f35b6101a96004803603606081101561015357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104fd565b604051808215151515815260200191505060405180910390f35b61020f600480360360408110156101d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506105d6565b604051808215151515815260200191505060405180910390f35b6102756004803603604081101561023f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610689565b604051808215151515815260200191505060405180910390f35b6102d1600480360360208110156102a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610704565b6040518082815260200191505060405180910390f35b610329600480360360208110156102fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061074c565b005b6103336107bd565b005b6103816004803603604081101561034b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107cf565b604051808215151515815260200191505060405180910390f35b6103e7600480360360408110156103b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061089c565b604051808215151515815260200191505060405180910390f35b6104436004803603602081101561041757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108ba565b604051808215151515815260200191505060405180910390f35b6104bf6004803603604081101561047357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108d7565b6040518082815260200191505060405180910390f35b60006104e96104e261095e565b8484610966565b6001905092915050565b6000600254905090565b600061050a848484610b5d565b6105cb8461051661095e565b6105c6856040518060600160405280602881526020016114fd60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061057c61095e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e139092919063ffffffff16565b610966565b600190509392505050565b600061067f6105e361095e565b8461067a85600160006105f461095e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed390919063ffffffff16565b610966565b6001905092915050565b600061069b61069661095e565b6108ba565b6106f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806114ac6030913960400191505060405180910390fd5b6106fa8383610f5b565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61075c61075761095e565b6108ba565b6107b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806114ac6030913960400191505060405180910390fd5b6107ba81611116565b50565b6107cd6107c861095e565b611170565b565b60006108926107dc61095e565b8461088d85604051806060016040528060258152602001611590602591396001600061080661095e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e139092919063ffffffff16565b610966565b6001905092915050565b60006108b06108a961095e565b8484610b5d565b6001905092915050565b60006108d08260036111ca90919063ffffffff16565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061156c6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114646022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610be3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806115476025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806114416023913960400191505060405180910390fd5b610cd481604051806060016040528060268152602001611486602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e139092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d67816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610ec0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e85578082015181840152602081019050610e6a565b50505050905090810190601f168015610eb25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015610f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61101381600254610ed390919063ffffffff16565b60028190555061106a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b61112a8160036112a890919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b61118481600361138390919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611251576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806115256022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112b282826111ca565b15611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61138d82826111ca565b6113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806114dc6021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365526f6c65733a206163636f756e7420697320746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a7231582056e4b738cf76f0838e717d12794ecbbd6278399c81f9192ab9d5f01d5c4c3baf64736f6c63430005100032526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373",
+ "_disabled": [
{
"constant": false,
- "inputs": [],
- "name": "renounceMinter",
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "addMinter",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
- "constant": true,
- "inputs": [],
- "name": "totalSupply",
- "outputs": [
+ "constant": false,
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
{
"internalType": "uint256",
- "name": "",
+ "name": "subtractedValue",
"type": "uint256"
}
],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
"payable": false,
- "stateMutability": "view",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -292,16 +281,16 @@
"inputs": [
{
"internalType": "address",
- "name": "recipient",
+ "name": "spender",
"type": "address"
},
{
"internalType": "uint256",
- "name": "amount",
+ "name": "addedValue",
"type": "uint256"
}
],
- "name": "transfer",
+ "name": "increaseAllowance",
"outputs": [
{
"internalType": "bool",
@@ -314,25 +303,15 @@
"type": "function"
},
{
- "constant": false,
+ "constant": true,
"inputs": [
{
"internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "recipient",
+ "name": "account",
"type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
}
],
- "name": "transferFrom",
+ "name": "isMinter",
"outputs": [
{
"internalType": "bool",
@@ -341,9 +320,32 @@
}
],
"payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "constant": false,
+ "inputs": [],
+ "name": "renounceMinter",
+ "outputs": [],
+ "payable": false,
"stateMutability": "nonpayable",
"type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
}
- ],
- "bytecode": "0x608060405262000024620000186200002a60201b60201c565b6200003260201b60201c565b62000257565b600033905090565b6200004d8160036200009360201b620012a81790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b620000a582826200017760201b60201c565b1562000119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000200576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180620018506022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115e980620002676000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063983b2d5611610071578063983b2d56146102e7578063986502751461032b578063a457c2d714610335578063a9059cbb1461039b578063aa271e1a14610401578063dd62ed3e1461045d576100b4565b8063095ea7b3146100b957806318160ddd1461011f57806323b872dd1461013d57806339509351146101c357806340c10f191461022957806370a082311461028f575b600080fd5b610105600480360360408110156100cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104d5565b604051808215151515815260200191505060405180910390f35b6101276104f3565b6040518082815260200191505060405180910390f35b6101a96004803603606081101561015357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104fd565b604051808215151515815260200191505060405180910390f35b61020f600480360360408110156101d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506105d6565b604051808215151515815260200191505060405180910390f35b6102756004803603604081101561023f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610689565b604051808215151515815260200191505060405180910390f35b6102d1600480360360208110156102a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610704565b6040518082815260200191505060405180910390f35b610329600480360360208110156102fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061074c565b005b6103336107bd565b005b6103816004803603604081101561034b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107cf565b604051808215151515815260200191505060405180910390f35b6103e7600480360360408110156103b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061089c565b604051808215151515815260200191505060405180910390f35b6104436004803603602081101561041757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108ba565b604051808215151515815260200191505060405180910390f35b6104bf6004803603604081101561047357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108d7565b6040518082815260200191505060405180910390f35b60006104e96104e261095e565b8484610966565b6001905092915050565b6000600254905090565b600061050a848484610b5d565b6105cb8461051661095e565b6105c6856040518060600160405280602881526020016114fd60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061057c61095e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e139092919063ffffffff16565b610966565b600190509392505050565b600061067f6105e361095e565b8461067a85600160006105f461095e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed390919063ffffffff16565b610966565b6001905092915050565b600061069b61069661095e565b6108ba565b6106f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806114ac6030913960400191505060405180910390fd5b6106fa8383610f5b565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61075c61075761095e565b6108ba565b6107b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806114ac6030913960400191505060405180910390fd5b6107ba81611116565b50565b6107cd6107c861095e565b611170565b565b60006108926107dc61095e565b8461088d85604051806060016040528060258152602001611590602591396001600061080661095e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e139092919063ffffffff16565b610966565b6001905092915050565b60006108b06108a961095e565b8484610b5d565b6001905092915050565b60006108d08260036111ca90919063ffffffff16565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061156c6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114646022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610be3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806115476025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806114416023913960400191505060405180910390fd5b610cd481604051806060016040528060268152602001611486602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e139092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d67816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610ec0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e85578082015181840152602081019050610e6a565b50505050905090810190601f168015610eb25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015610f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61101381600254610ed390919063ffffffff16565b60028190555061106a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ed390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b61112a8160036112a890919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b61118481600361138390919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611251576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806115256022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112b282826111ca565b15611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61138d82826111ca565b6113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806114dc6021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365526f6c65733a206163636f756e7420697320746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a7231582056e4b738cf76f0838e717d12794ecbbd6278399c81f9192ab9d5f01d5c4c3baf64736f6c63430005100032526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373"
-}
\ No newline at end of file
+ ]
+}
diff --git a/crates/contracts/artifacts/FlashLoanRouter.json b/contracts/artifacts/FlashLoanRouter.json
similarity index 99%
rename from crates/contracts/artifacts/FlashLoanRouter.json
rename to contracts/artifacts/FlashLoanRouter.json
index a4349a5917..97c8710b21 100644
--- a/crates/contracts/artifacts/FlashLoanRouter.json
+++ b/contracts/artifacts/FlashLoanRouter.json
@@ -11,19 +11,6 @@
],
"stateMutability": "nonpayable"
},
- {
- "type": "function",
- "name": "borrowerCallback",
- "inputs": [
- {
- "name": "encodedLoansWithSettlement",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
- },
{
"type": "function",
"name": "flashLoanAndSettle",
@@ -64,19 +51,6 @@
"outputs": [],
"stateMutability": "nonpayable"
},
- {
- "type": "function",
- "name": "settlementAuthentication",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "address",
- "internalType": "contract ICowAuthentication"
- }
- ],
- "stateMutability": "view"
- },
{
"type": "function",
"name": "settlementContract",
@@ -291,5 +265,33 @@
},
"version": 1
},
- "id": 27
+ "id": 27,
+ "_disabled": [
+ {
+ "type": "function",
+ "name": "borrowerCallback",
+ "inputs": [
+ {
+ "name": "encodedLoansWithSettlement",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "settlementAuthentication",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract ICowAuthentication"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ]
}
diff --git a/crates/contracts/artifacts/GPv2AllowListAuthentication.json b/contracts/artifacts/GPv2AllowListAuthentication.json
similarity index 99%
rename from crates/contracts/artifacts/GPv2AllowListAuthentication.json
rename to contracts/artifacts/GPv2AllowListAuthentication.json
index 37d526dad7..7dfa98f4de 100644
--- a/crates/contracts/artifacts/GPv2AllowListAuthentication.json
+++ b/contracts/artifacts/GPv2AllowListAuthentication.json
@@ -58,30 +58,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "offset",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "length",
- "type": "uint256"
- }
- ],
- "name": "getStorageAt",
- "outputs": [
- {
- "internalType": "bytes",
- "name": "",
- "type": "bytes"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -140,19 +116,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "manager_",
- "type": "address"
- }
- ],
- "name": "setManager",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -176,30 +139,6 @@
],
"stateMutability": "nonpayable",
"type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "targetContract",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "calldataPayload",
- "type": "bytes"
- }
- ],
- "name": "simulateDelegatecallInternal",
- "outputs": [
- {
- "internalType": "bytes",
- "name": "response",
- "type": "bytes"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b50610e10806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80637f7120fe11610076578063d0ebdbe71161005b578063d0ebdbe7146102e3578063ec58f4b814610316578063f84436bd14610349576100a3565b80637f7120fe1461027b5780638fd57b92146102b0576100a3565b806302cc250d146100a857806343218e19146100ef578063481c6a75146102275780635624b25b14610258575b600080fd5b6100db600480360360208110156100be57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661040c565b604080519115158252519081900360200190f35b6101b26004803603604081101561010557600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561013d57600080fd5b82018360208201111561014f57600080fd5b8035906020019184600183028401116401000000008311171561017157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610437945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ec5781810151838201526020016101d4565b50505050905090810190601f1680156102195780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022f6105af565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101b26004803603604081101561026e57600080fd5b50803590602001356105d1565b6102ae6004803603602081101561029157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610647565b005b6102ae600480360360208110156102c657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166107f8565b6102ae600480360360208110156102f957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610907565b6102ae6004803603602081101561032c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a47565b6101b26004803603604081101561035f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561039757600080fd5b8201836020820111156103a957600080fd5b803590602001918460018302840111640100000000831117156103cb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b5a945050505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b606060008373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106104a057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610463565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610500576040519150601f19603f3d011682016040523d82523d6000602084013e610505565b606091505b5080935081925050506105a882826040516020018083805190602001908083835b6020831061056357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610526565b6001836020036101000a03801982511681845116808217855250505050505090500182151560f81b815260010192505050604051602081830303815290604052610da3565b5092915050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1681565b606060008260200267ffffffffffffffff811180156105ef57600080fd5b506040519080825280601f01601f19166020018201604052801561061a576020820181803683370190505b50905060005b8381101561063d5784810154602080830284010152600101610620565b5090505b92915050565b600054610100900460ff16806106605750610660610dab565b8061066e575060005460ff16155b6106d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e697469616c697a61626c653a20696e697469616c697a6564000000000000604482015290519081900360640190fd5b600054610100900460ff1615801561073f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff851690810291909117825560408051918252602082019290925281517f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a4350929181900390910190a180156107f457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16331461088457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f475076323a2063616c6c6572206e6f74206d616e616765720000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055815192835290517f640e18a2587e1d83e4fdabf70257d0a800ca4b2c1aaad1dfc485a4ad8bbbd6c69281900390910190a150565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633148061094f575033610937610db1565b73ffffffffffffffffffffffffffffffffffffffff16145b6109ba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f475076323a206e6f7420617574686f72697a6564000000000000000000000000604482015290519081900360640190fd5b6000805473ffffffffffffffffffffffffffffffffffffffff838116620100008181027fffffffffffffffffffff0000000000000000000000000000000000000000ffff85161790945560408051918252939092041660208201819052825190927f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a4350928290030190a15050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610ad357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f475076323a2063616c6c6572206e6f74206d616e616765720000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602081815260409283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155815192835290517f41f9d09dd5159251f8a8e482bbe097b7c01a5e6f70c5a0ddb494906464fc9dd79281900390910190a150565b606060006343218e1960e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bc4578181015183820152602001610bac565b50505050905090810190601f168015610bf15780820380516001836020036101000a031916815260200191505b50604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909816979097178752518151919750309688965090945084935091508083835b60208310610cc257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c85565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d24576040519150601f19603f3d011682016040523d82523d6000602084013e610d29565b606091505b50905080925050600082600184510381518110610d4257fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b149050610d85836001855103610dd6565b8015610d92575050610641565b610d9b83610da3565b505092915050565b805160208201fd5b303b1590565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905256fea26469706673582212207106ba36b2d518d89a5ce88705dd7f52d98f3a8c838b8bb7ad9cdaa5b4254ab164736f6c63430007060033",
@@ -291,5 +230,68 @@
"kind": "user",
"methods": {},
"version": 1
- }
-}
\ No newline at end of file
+ },
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "offset",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "length",
+ "type": "uint256"
+ }
+ ],
+ "name": "getStorageAt",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "manager_",
+ "type": "address"
+ }
+ ],
+ "name": "setManager",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "targetContract",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "calldataPayload",
+ "type": "bytes"
+ }
+ ],
+ "name": "simulateDelegatecallInternal",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "response",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ]
+}
diff --git a/crates/contracts/artifacts/GPv2Settlement.json b/contracts/artifacts/GPv2Settlement.json
similarity index 99%
rename from crates/contracts/artifacts/GPv2Settlement.json
rename to contracts/artifacts/GPv2Settlement.json
index 529b2f6263..2fbbfb6403 100644
--- a/crates/contracts/artifacts/GPv2Settlement.json
+++ b/contracts/artifacts/GPv2Settlement.json
@@ -1,5 +1,24 @@
{
"abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "name": "filledAmount",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
{
"inputs": [
{
@@ -147,6 +166,10 @@
"name": "Trade",
"type": "event"
},
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ },
{
"inputs": [],
"name": "authenticator",
@@ -173,75 +196,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "bytes",
- "name": "",
- "type": "bytes"
- }
- ],
- "name": "filledAmount",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes[]",
- "name": "orderUids",
- "type": "bytes[]"
- }
- ],
- "name": "freeFilledAmountStorage",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes[]",
- "name": "orderUids",
- "type": "bytes[]"
- }
- ],
- "name": "freePreSignatureStorage",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "offset",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "length",
- "type": "uint256"
- }
- ],
- "name": "getStorageAt",
- "outputs": [
- {
- "internalType": "bytes",
- "name": "",
- "type": "bytes"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -255,25 +209,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "bytes",
- "name": "",
- "type": "bytes"
- }
- ],
- "name": "preSignature",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -418,30 +353,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "targetContract",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "calldataPayload",
- "type": "bytes"
- }
- ],
- "name": "simulateDelegatecallInternal",
- "outputs": [
- {
- "internalType": "bytes",
- "name": "response",
- "type": "bytes"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -574,10 +485,6 @@
],
"stateMutability": "view",
"type": "function"
- },
- {
- "stateMutability": "payable",
- "type": "receive"
}
],
"bytecode": "0x6101006040523480156200001257600080fd5b50604051620053eb380380620053eb83398101604081905262000035916200015b565b604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f6c85c0337eba1661327f94f3bf46c8a7f9311a563f4d5c948362567f5d8ed60c828401527ff9446b8e937d86f0bc87cac73923491692b123ca5f8761908494703758206adf606080840191909152466080808501919091523060a08086019190915285518086038201815260c09586019687905280519401939093209052600180556001600160601b031986821b811690925284901b16905281906200010a906200014d565b62000116919062000199565b604051809103906000f08015801562000133573d6000803e3d6000fd5b5060601b6001600160601b03191660e05250620001c69050565b61129e806200414d83390190565b600080604083850312156200016e578182fd5b82516200017b81620001ad565b60208401519092506200018e81620001ad565b809150509250929050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114620001c357600080fd5b50565b60805160a05160601c60c05160601c60e05160601c613f2562000228600039806104c55280610d61528061109052806115f0525080610556528061158b52508061039252806106bc528061099d52508061131e52806123df5250613f256000f3fe6080604052600436106100ec5760003560e01c80639b552cc21161008a578063ed9f35ce11610059578063ed9f35ce14610274578063f698da2514610294578063f84436bd146102a9578063fbfa77cf146102c9576100f3565b80639b552cc2146101ff578063a2a7d51b14610214578063d08d33d114610234578063ec6cb13f14610254576100f3565b80632479fb6e116100c65780632479fb6e1461016557806343218e19146101925780635624b25b146101bf578063845a101f146101df576100f3565b806313d79a0b146100f857806315337bc01461011a5780632335c76b1461013a576100f3565b366100f357005b600080fd5b34801561010457600080fd5b5061011861011336600461322e565b6102de565b005b34801561012657600080fd5b50610118610135366004613441565b6105c1565b34801561014657600080fd5b5061014f6106ba565b60405161015c91906136ee565b60405180910390f35b34801561017157600080fd5b506101856101803660046134ca565b6106de565b60405161015c91906137f0565b34801561019e57600080fd5b506101b26101ad3660046131a0565b6106fb565b60405161015c919061380d565b3480156101cb57600080fd5b506101b26101da3660046134fd565b610873565b3480156101eb57600080fd5b506101186101fa36600461338e565b6108e9565b34801561020b57600080fd5b5061014f61108e565b34801561022057600080fd5b5061011861022f3660046131ee565b6110b2565b34801561024057600080fd5b5061018561024f3660046134ca565b6110fb565b34801561026057600080fd5b5061011861026f366004613475565b611118565b34801561028057600080fd5b5061011861028f3660046131ee565b6112d7565b3480156102a057600080fd5b5061018561131c565b3480156102b557600080fd5b506101b26102c43660046131a0565b611340565b3480156102d557600080fd5b5061014f611589565b6002600154141561035057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556040517f02cc250d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906302cc250d906103c79033906004016136ee565b60206040518083038186803b1580156103df57600080fd5b505afa1580156103f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104179190613425565b610456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613c78565b60405180910390fd5b6104728160005b60200281019061046d9190613d16565b6115ad565b6000806104838989898989896116ea565b6040517f7d10d11f000000000000000000000000000000000000000000000000000000008152919350915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637d10d11f906104fa90859060040161370f565b600060405180830381600087803b15801561051457600080fd5b505af1158015610528573d6000803e3d6000fd5b5050505061053c8360016003811061045d57fe5b61057c73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001682611851565b61058783600261045d565b60405133907f40338ce1a7c49204f0099533b1e9a7ee0a3d261f84974ab7af36105b8c4e9db490600090a250506001805550505050505050565b60006105cd8383611b2f565b5091505073ffffffffffffffffffffffffffffffffffffffff81163314610620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613a1b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600284846040516106539291906136c2565b9081526020016040518091039020819055508073ffffffffffffffffffffffffffffffffffffffff167f875b6cb035bbd4ac6500fabc6d1e4ca5bdc58a3e2b424ccb5c24cdbebeb009a984846040516106ad9291906137f9565b60405180910390a2505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b805160208183018101805160028252928201919093012091525481565b606060008373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b6020831061076457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610727565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146107c4576040519150601f19603f3d011682016040523d82523d6000602084013e6107c9565b606091505b50809350819250505061086c82826040516020018083805190602001908083835b6020831061082757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107ea565b6001836020036101000a03801982511681845116808217855250505050505090500182151560f81b815260010192505050604051602081830303815290604052611bbd565b5092915050565b606060008260200267ffffffffffffffff8111801561089157600080fd5b506040519080825280601f01601f1916602001820160405280156108bc576020820181803683370190505b50905060005b838110156108df57848101546020808302840101526001016108c2565b5090505b92915050565b6002600154141561095b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556040517f02cc250d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906302cc250d906109d29033906004016136ee565b60206040518083038186803b1580156109ea57600080fd5b505afa1580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a229190613425565b610a58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613c78565b6000610a62611bc5565b8051909150610a7382868686611bf2565b60007ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677582610100015114610aa8576001610aab565b60005b9050610ab5612f90565b60408085015173ffffffffffffffffffffffffffffffffffffffff90811683526101408501517f4ac99ace14ee0a5ef932dc609df0943ab7ac16b7583634612f8dc35a4289a6ce9081146020850152606080880151909216928401929092526101608501519091149082015260008667ffffffffffffffff81118015610b3a57600080fd5b50604051908082528060200260200182016040528015610b64578160200160208202803683370190505b50610100850151909150610120870135907ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee3467751415610c30578460800151811015610bda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613c41565b610be78560600151611c90565b82886000013581518110610bf757fe5b602002602001018181525050610c0c81611c90565b60000382886020013581518110610c1f57fe5b602002602001018181525050610cc0565b8460600151811115610c6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613b9c565b610c7781611c90565b82886000013581518110610c8757fe5b602002602001018181525050610ca08560800151611c90565b60000382886020013581518110610cb357fe5b6020026020010181815250505b610cc8612f90565b8660400151816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508560000151816020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508560e0015181604001818152505085610140015181606001818152505060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634817a286878f8f8f8f8b8b8f60a001518b6040518a63ffffffff1660e01b8152600401610dcc99989796959493929190613877565b600060405180830381600087803b158015610de657600080fd5b505af1158015610dfa573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610e4091908101906132ed565b90506000886020015190506000610e6d838c6000013581518110610e6057fe5b6020026020010151611d25565b90506000610e94848d6020013581518110610e8457fe5b6020026020010151600003611d25565b9050600283604051610ea691906136d2565b908152602001604051809103902054600014610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613bd3565b7ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee3467758a61010001511415610f825789606001518214610f58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613ac0565b8960600151600284604051610f6d91906136d2565b90815260405190819003602001902055610fe5565b89608001518114610fbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613af7565b8960800151600284604051610fd491906136d2565b908152604051908190036020019020555b8a6040015173ffffffffffffffffffffffffffffffffffffffff167fa07a543ab8a018198e99ca0184c93fe9050a79400a0a723441f84de1d972cc178b600001518c6020015185858f60e001518960405161104596959493929190613820565b60405180910390a260405133907f40338ce1a7c49204f0099533b1e9a7ee0a3d261f84974ab7af36105b8c4e9db490600090a25050600180555050505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b3033146110eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613b65565b6110f760008383611d96565b5050565b805160208183018101805160008252928201919093012091525481565b60006111248484611b2f565b5091505073ffffffffffffffffffffffffffffffffffffffff811633146111ac57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f475076323a2063616e6e6f74207072657369676e206f72646572000000000000604482015290519081900360640190fd5b8115611206577ff59c009283ff87aa78203fc4d9c2df025ee851130fb69cc3e068941f6b5e2d6f60001c60008585604051808383808284378083019250505092505050908152602001604051809103902081905550611232565b600080858560405180838380828437919091019485525050604051928390036020019092209290925550505b8073ffffffffffffffffffffffffffffffffffffffff167f01bf7c8b0ca55deecbea89d7e58295b7ffbf685fd0d96801034ba8c6ffe1c68d858585604051808060200183151581526020018281038252858582818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201829003965090945050505050a250505050565b303314611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613b65565b6110f760028383611d96565b7f000000000000000000000000000000000000000000000000000000000000000081565b606060006343218e1960e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156113aa578181015183820152602001611392565b50505050905090810190601f1680156113d75780820380516001836020036101000a031916815260200191505b50604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909816979097178752518151919750309688965090945084935091508083835b602083106114a857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161146b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461150a576040519150601f19603f3d011682016040523d82523d6000602084013e61150f565b606091505b5090508092505060008260018451038151811061152857fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600160f81b14905061156b836001855103611e46565b80156115785750506108e3565b61158183611bbd565b505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005b818110156116e557368383838181106115c557fe5b90506020028101906115d79190613dde565b905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661161d6020830183613184565b73ffffffffffffffffffffffffffffffffffffffff16141561166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613caf565b61167481611e4a565b6116816020820182613184565b73ffffffffffffffffffffffffffffffffffffffff167fed99827efb37016f2275f98c4bcf71c7551c75d59e9b450f79fa32e60be672c282602001356116c684611ea1565b6040516116d4929190613ce6565b60405180910390a2506001016115b0565b505050565b60608060006116f7611bc5565b90508367ffffffffffffffff8111801561171057600080fd5b5060405190808252806020026020018201604052801561174a57816020015b611737612f90565b81526020019060019003908161172f5790505b5092508367ffffffffffffffff8111801561176457600080fd5b5060405190808252806020026020018201604052801561179e57816020015b61178b612f90565b8152602001906001900390816117835790505b50915060005b8481101561184457368686838181106117b957fe5b90506020028101906117cb9190613e11565b90506117d9838c8c84611bf2565b61183b838a8a84358181106117ea57fe5b905060200201358b8b856020013581811061180157fe5b9050602002013584610120013589878151811061181a57fe5b602002602001015189888151811061182e57fe5b6020026020010151611ecb565b506001016117a4565b5050965096945050505050565b6000815167ffffffffffffffff8111801561186b57600080fd5b506040519080825280602002602001820160405280156118a557816020015b611892612fb7565b81526020019060019003908161188a5790505b5090506000805b8351811015611a935760008482815181106118c357fe5b6020026020010151905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff1614156119c7577f4ac99ace14ee0a5ef932dc609df0943ab7ac16b7583634612f8dc35a4289a6ce81606001511415611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613b2e565b8051604080830151905173ffffffffffffffffffffffffffffffffffffffff9092169181156108fc0291906000818181858888f193505050501580156119c1573d6000803e3d6000fd5b50611a8a565b7f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc981606001511415611a2657805160408201516020830151611a219273ffffffffffffffffffffffffffffffffffffffff90911691612216565b611a8a565b6000848480600101955081518110611a3a57fe5b602090810291909101810151600081528382015173ffffffffffffffffffffffffffffffffffffffff90811692820192909252604080850151908201523060608201528351909116608090910152505b506001016118ac565b508015611b2957611aa48282611e46565b6040517f0e8e3e8400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690630e8e3e8490611af690859060040161375d565b600060405180830381600087803b158015611b1057600080fd5b505af1158015611b24573d6000803e3d6000fd5b505050505b50505050565b6000808060388414611ba257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f475076323a20696e76616c696420756964000000000000000000000000000000604482015290519081900360640190fd5b5050823593602084013560601c936034013560e01c92509050565b805160208201fd5b611bcd612fe7565b6040805160388082526060820190925290602082018180368337505050602082015290565b83516000611c02838686856122ee565b9050600080611c1f8484611c1a610140890189613d7b565b6123d6565b91509150611c4282828660a001518b60200151612485909392919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff81166040890152611c688482612507565b73ffffffffffffffffffffffffffffffffffffffff1660609098019790975250505050505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115611d2157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53616665436173743a20696e74323536206f766572666c6f7700000000000000604482015290519081900360640190fd5b5090565b600080821215611d2157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53616665436173743a206e6f7420706f73697469766500000000000000000000604482015290519081900360640190fd5b60005b81811015611b2957366000848484818110611db057fe5b9050602002810190611dc29190613d7b565b915091506000611dd28383611b2f565b92505050428163ffffffff1610611e15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613c0a565b6000878484604051611e289291906136c2565b90815260405190819003602001902055505060019091019050611d99565b9052565b73ffffffffffffffffffffffffffffffffffffffff8135166020820135366000611e776040860186613d7b565b9150915060405181838237600080838387895af1611e99573d6000803e3d6000fd5b505050505050565b60003681611eb26040850185613d7b565b909250905060048110611ec457813592505b5050919050565b8551602087015160a08201514263ffffffff9091161015611f18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613a52565b6080820151611f279087612539565b6060830151611f369089612539565b1015611f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613a89565b6000806000807ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775866101000151141561206f5785610120015115611fdb57889350611fd48660600151611fce868960e0015161253990919063ffffffff16565b906125c9565b9150611fea565b856060015193508560e0015191505b611ffe8a611ff8868e612539565b9061264a565b925061202a8460028760405161201491906136d2565b90815260405190819003602001902054906126e8565b9050856060015181111561206a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613bd3565b612116565b856101200151156120a35788925061209c8660800151611fce858960e0015161253990919063ffffffff16565b91506120b2565b856080015192508560e0015191505b6120c08b611fce858d612539565b93506120d68360028760405161201491906136d2565b90508560800151811115612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044d90613bd3565b61212084836126e8565b93508060028660405161213391906136d2565b9081526020016040518091039020819055508b6040015173ffffffffffffffffffffffffffffffffffffffff167fa07a543ab8a018198e99ca0184c93fe9050a79400a0a723441f84de1d972cc17876000015188602001518787878b6040516121a196959493929190613820565b60405180910390a250506040808b015173ffffffffffffffffffffffffffffffffffffffff9081168852855181166020808a0191909152888301949094526101408601516060988901529a8701518b16865282850151909a169185019190915297830197909752610160015191015250505050565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1612279573d6000803e3d6000fd5b506122838461275c565b611b2957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e736665720000000000000000000000604482015290519081900360640190fd5b6000838386358181106122fd57fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff168452508490849087013581811061233057fe5b73ffffffffffffffffffffffffffffffffffffffff602091820293909301358316908501525060408087013590911690830152606080860135908301526080808601359083015263ffffffff60a080870135919091169083015260c0808601359083015260e080860135908301526123ac610100860135612826565b61016087019190915261014086019190915290151561012085015261010090930152509392505050565b600080612403867f000000000000000000000000000000000000000000000000000000000000000061297b565b9150600085600381111561241357fe5b141561242b57612424828585612a05565b905061247c565b600185600381111561243957fe5b141561244a57612424828585612a1a565b600285600381111561245857fe5b141561246957612424828585612a82565b6124798285858960a00151612c20565b90505b94509492505050565b60388451146124f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a2075696420627566666572206f766572666c6f7700000000000000604482015290519081900360640190fd5b60388401526034830152602090910152565b604082015160009073ffffffffffffffffffffffffffffffffffffffff166125305750806108e3565b50506040015190565b600082612548575060006108e3565b8282028284828161255557fe5b04146125c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f536166654d6174683a206d756c206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b9392505050565b600080821161263957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f536166654d6174683a206469766973696f6e2062792030000000000000000000604482015290519081900360640190fd5b81838161264257fe5b049392505050565b60008082116126ba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f536166654d6174683a206365696c696e67206469766973696f6e206279203000604482015290519081900360640190fd5b8183816126c357fe5b06156126d05760016126d3565b60005b60ff168284816126df57fe5b04019392505050565b6000828201838110156125c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061279a565b7f08c379a0000000000000000000000000000000000000000000000000000000006000526020600452806024528160445260646000fd5b3d80156127d95760208114612813576127d47f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f612763565b612820565b823b61280a5761280a7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014612763565b60019150612820565b3d6000803e600051151591505b50919050565b6000808080806001861661285c577ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee3467759450612880565b7f6ed88e868af0a1983e3886d5f3e95a2fafbd6c3450bc229e27342283dc429ccc94505b6002861615159350600886166128b8577f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9925061290c565b600486166128e8577fabee3b73373acd583a130924aad6dc38cfdc44ba0555ba94ce2ff63980ea0632925061290c565b7f4ac99ace14ee0a5ef932dc609df0943ab7ac16b7583634612f8dc35a4289a6ce92505b6010861661293c577f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc99150612960565b7f4ac99ace14ee0a5ef932dc609df0943ab7ac16b7583634612f8dc35a4289a6ce91505b600586901c600381111561297057fe5b905091939590929450565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090910180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a0822091526040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000612a12848484612de5565b949350505050565b6000808460405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050612a79818585612de5565b95945050505050565b813560601c366000612a978460148188613e68565b604080517f1626ba7e00000000000000000000000000000000000000000000000000000000808252600482018b81526024830193845260448301859052949650929450919273ffffffffffffffffffffffffffffffffffffffff871692631626ba7e928b928892889290606401848480828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201965060209550909350505081840390508186803b158015612b5d57600080fd5b505afa158015612b71573d6000803e3d6000fd5b505050506040513d6020811015612b8757600080fd5b50517fffffffff000000000000000000000000000000000000000000000000000000001614612c1757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f475076323a20696e76616c69642065697031323731207369676e617475726500604482015290519081900360640190fd5b50509392505050565b600060148314612c9157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f475076323a206d616c666f726d6564207072657369676e617475726500000000604482015290519081900360640190fd5b506040805160388082526060828101909352853590921c9160009190602082018180368337019050509050612cc881878486612485565b7ff59c009283ff87aa78203fc4d9c2df025ee851130fb69cc3e068941f6b5e2d6f60001c6000826040518082805190602001908083835b60208310612d3c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612cff565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390205414612ddc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206f72646572206e6f74207072657369676e656400000000000000604482015290519081900360640190fd5b50949350505050565b600060418214612e5657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f475076323a206d616c666f726d6564206563647361207369676e617475726500604482015290519081900360640190fd5b604080516000815260208181018084528790528286013560f81c82840181905286356060840181905282880135608085018190529451909493919260019260a0808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015612ed9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015194505073ffffffffffffffffffffffffffffffffffffffff8416612f8657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f475076323a20696e76616c6964206563647361207369676e6174757265000000604482015290519081900360640190fd5b5050509392505050565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6040805160a081019091528060008152600060208201819052604082018190526060820181905260809091015290565b6040518060800160405280612ffa613014565b815260606020820181905260006040830181905291015290565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915290565b60008083601f840112613089578182fd5b50813567ffffffffffffffff8111156130a0578182fd5b60208301915083602080830285010111156130ba57600080fd5b9250929050565b60008083601f8401126130d2578182fd5b50813567ffffffffffffffff8111156130e9578182fd5b6020830191508360208285010111156130ba57600080fd5b600082601f830112613111578081fd5b813567ffffffffffffffff81111561312557fe5b61315660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613e44565b81815284602083860101111561316a578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215613195578081fd5b81356125c281613ebc565b600080604083850312156131b2578081fd5b82356131bd81613ebc565b9150602083013567ffffffffffffffff8111156131d8578182fd5b6131e485828601613101565b9150509250929050565b60008060208385031215613200578182fd5b823567ffffffffffffffff811115613216578283fd5b61322285828601613078565b90969095509350505050565b60008060008060008060006080888a031215613248578283fd5b873567ffffffffffffffff8082111561325f578485fd5b61326b8b838c01613078565b909950975060208a0135915080821115613283578485fd5b61328f8b838c01613078565b909750955060408a01359150808211156132a7578485fd5b6132b38b838c01613078565b909550935060608a01359150808211156132cb578283fd5b508801606081018a10156132dd578182fd5b8091505092959891949750929550565b600060208083850312156132ff578182fd5b825167ffffffffffffffff80821115613316578384fd5b818501915085601f830112613329578384fd5b81518181111561333557fe5b8381029150613345848301613e44565b8181528481019084860184860187018a101561335f578788fd5b8795505b83861015613381578051835260019590950194918601918601613363565b5098975050505050505050565b6000806000806000606086880312156133a5578081fd5b853567ffffffffffffffff808211156133bc578283fd5b6133c889838a01613078565b909750955060208801359150808211156133e0578283fd5b6133ec89838a01613078565b90955093506040880135915080821115613404578283fd5b5086016101608189031215613417578182fd5b809150509295509295909350565b600060208284031215613436578081fd5b81516125c281613ee1565b60008060208385031215613453578182fd5b823567ffffffffffffffff811115613469578283fd5b613222858286016130c1565b600080600060408486031215613489578081fd5b833567ffffffffffffffff81111561349f578182fd5b6134ab868287016130c1565b90945092505060208401356134bf81613ee1565b809150509250925092565b6000602082840312156134db578081fd5b813567ffffffffffffffff8111156134f1578182fd5b612a1284828501613101565b6000806040838503121561350f578182fd5b50508035926020909101359150565b60008284526020808501945082825b8581101561356857813561354081613ebc565b73ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161352d565b509495945050505050565b6000815180845260208085019450808401835b8381101561356857815187529582019590820190600101613586565b600082845282826020860137806020848601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011685010190509392505050565b60008151808452613602816020860160208601613e90565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401525060408101516040830152606081015160608301525050565b73ffffffffffffffffffffffffffffffffffffffff808251168352602082015115156020840152806040830151166040840152506060810151151560608301525050565b63ffffffff169052565b6000828483379101908152919050565b600082516136e4818460208701613e90565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6020808252825182820181905260009190848201906040850190845b818110156137515761373e838551613634565b928401926080929092019160010161372b565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b828110156137e357815180516004811061379057fe5b85528087015173ffffffffffffffffffffffffffffffffffffffff908116888701528682015187870152606080830151821690870152608091820151169085015260a0909301929085019060010161377a565b5091979650505050505050565b90815260200190565b600060208252612a126020830184866135a2565b6000602082526125c260208301846135ea565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015283608083015260c060a083015261386b60c08301846135ea565b98975050505050505050565b60006101a0820160028c1061388857fe5b8b835260206101a081850152818b83526101c0850190506101c0828d0286010192508c845b8d8110156139b6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe408786030183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618f36030182351261390c578586fd5b8e823501803586528481013585870152604081013560408701526060810135606087015260808101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112613964578788fd5b8101803567ffffffffffffffff81111561397c578889fd5b80360383131561398a578889fd5b60a060808901526139a160a08901828985016135a2565b975050509284019250908301906001016138ad565b5050505082810360408401526139cd81898b61351e565b90506139dc6060840188613674565b82810360e08401526139ee8187613573565b9150506139ff6101008301856136b8565b613a0d610120830184613634565b9a9950505050505050505050565b6020808252601f908201527f475076323a2063616c6c657220646f6573206e6f74206f776e206f7264657200604082015260600190565b60208082526013908201527f475076323a206f72646572206578706972656400000000000000000000000000604082015260600190565b6020808252601f908201527f475076323a206c696d6974207072696365206e6f742072657370656374656400604082015260600190565b6020808252601f908201527f475076323a2073656c6c20616d6f756e74206e6f742072657370656374656400604082015260600190565b6020808252601e908201527f475076323a2062757920616d6f756e74206e6f74207265737065637465640000604082015260600190565b6020808252601e908201527f475076323a20756e737570706f7274656420696e7465726e616c204554480000604082015260600190565b60208082526018908201527f475076323a206e6f7420616e20696e746572616374696f6e0000000000000000604082015260600190565b60208082526014908201527f475076323a206c696d697420746f6f2068696768000000000000000000000000604082015260600190565b60208082526012908201527f475076323a206f726465722066696c6c65640000000000000000000000000000604082015260600190565b60208082526017908201527f475076323a206f72646572207374696c6c2076616c6964000000000000000000604082015260600190565b60208082526013908201527f475076323a206c696d697420746f6f206c6f7700000000000000000000000000604082015260600190565b60208082526012908201527f475076323a206e6f74206120736f6c7665720000000000000000000000000000604082015260600190565b6020808252601b908201527f475076323a20666f7262696464656e20696e746572616374696f6e0000000000604082015260600190565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260400190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613d4a578283fd5b83018035915067ffffffffffffffff821115613d64578283fd5b60209081019250810236038213156130ba57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613daf578283fd5b83018035915067ffffffffffffffff821115613dc9578283fd5b6020019150368190038213156130ba57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18336030181126136e4578182fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea18336030181126136e4578182fd5b60405181810167ffffffffffffffff81118282101715613e6057fe5b604052919050565b60008085851115613e77578182fd5b83861115613e83578182fd5b5050820193919092039150565b60005b83811015613eab578181015183820152602001613e93565b83811115611b295750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114613ede57600080fd5b50565b8015158114613ede57600080fdfea2646970667358221220de5e493c48a3b42da03a5db89085177b8d8ccec6e9bf6e8e48b3809343624c8f64736f6c6343000706003360c060405234801561001057600080fd5b5060405161129e38038061129e83398101604081905261002f9161004b565b33606090811b6080521b6001600160601b03191660a052610079565b60006020828403121561005c578081fd5b81516001600160a01b0381168114610072578182fd5b9392505050565b60805160601c60a05160601c6111ee6100b060003980610130528061020152806102bd5250806093528061024c52506111ee6000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80634817a2861461003b5780637d10d11f14610064575b600080fd5b61004e610049366004610cd9565b610079565b60405161005b9190610eb3565b60405180910390f35b610077610072366004610c69565b610234565b005b60603373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146100f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ea906110e5565b60405180910390fd5b6040517f945bcec900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063945bcec990610171908c908c908c908c908c908c908c90600401610f59565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101e59190810190610bd9565b905061022873ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001683336102e9565b98975050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146102a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ea906110e5565b6102e573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016838333610551565b5050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61030e6040840160208501610bb6565b73ffffffffffffffffffffffffffffffffffffffff16141561035c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ea9061111c565b7f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9826060013514156103d0576103cb6103986020840184610bb6565b82604085018035906103ad9060208801610bb6565b73ffffffffffffffffffffffffffffffffffffffff16929190610816565b61054c565b604080516001808252818301909252600091816020015b6103ef6109cb565b8152602001906001900390816103e757905050905060008160008151811061041357fe5b602002602001015190507fabee3b73373acd583a130924aad6dc38cfdc44ba0555ba94ce2ff63980ea063284606001351461044f576002610452565b60035b8190600381111561045f57fe5b9081600381111561046c57fe5b90525061047f6040850160208601610bb6565b73ffffffffffffffffffffffffffffffffffffffff16602080830191909152604080860135908301526104b490850185610bb6565b73ffffffffffffffffffffffffffffffffffffffff908116606083015283811660808301526040517f0e8e3e8400000000000000000000000000000000000000000000000000000000815290861690630e8e3e8490610517908590600401610ec6565b600060405180830381600087803b15801561053157600080fd5b505af1158015610545573d6000803e3d6000fd5b5050505050505b505050565b60008267ffffffffffffffff8111801561056a57600080fd5b506040519080825280602002602001820160405280156105a457816020015b6105916109cb565b8152602001906001900390816105895790505b5090506000805b8481101561077857368686838181106105c057fe5b60800291909101915073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90506105f06040830160208401610bb6565b73ffffffffffffffffffffffffffffffffffffffff16141561063e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ea9061111c565b7f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9816060013514156106945761068f61067a6020830183610bb6565b86604084018035906103ad9060208701610bb6565b61076f565b60008484806001019550815181106106a857fe5b602002602001015190507fabee3b73373acd583a130924aad6dc38cfdc44ba0555ba94ce2ff63980ea06328260600135146106e45760016106e7565b60035b819060038111156106f457fe5b9081600381111561070157fe5b9052506107146040830160208401610bb6565b73ffffffffffffffffffffffffffffffffffffffff166020808301919091526040808401359083015261074990830183610bb6565b73ffffffffffffffffffffffffffffffffffffffff908116606083015286166080909101525b506001016105ab565b50801561080e5761078982826108fd565b6040517f0e8e3e8400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871690630e8e3e84906107db908590600401610ec6565b600060405180830381600087803b1580156107f557600080fd5b505af1158015610809573d6000803e3d6000fd5b505050505b505050505050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af1610881573d6000803e3d6000fd5b5061088b85610901565b6108f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d00000000000000604482015290519081900360640190fd5b5050505050565b9052565b600061093f565b7f08c379a0000000000000000000000000000000000000000000000000000000006000526020600452806024528160445260646000fd5b3d801561097e57602081146109b8576109797f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f610908565b6109c5565b823b6109af576109af7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014610908565b600191506109c5565b3d6000803e600051151591505b50919050565b6040805160a081019091528060008152600060208201819052604082018190526060820181905260809091015290565b600082601f830112610a0b578081fd5b81356020610a20610a1b83611175565b611151565b8281528181019085830183850287018401881015610a3c578586fd5b855b85811015610a63578135610a5181611193565b84529284019290840190600101610a3e565b5090979650505050505050565b600082601f830112610a80578081fd5b81356020610a90610a1b83611175565b8281528181019085830183850287018401881015610aac578586fd5b855b85811015610a6357813584529284019290840190600101610aae565b60008083601f840112610adb578182fd5b50813567ffffffffffffffff811115610af2578182fd5b6020830191508360208083028501011115610b0c57600080fd5b9250929050565b80358015158114610b2357600080fd5b919050565b6000608082840312156109c5578081fd5b600060808284031215610b4a578081fd5b6040516080810181811067ffffffffffffffff82111715610b6757fe5b6040529050808235610b7881611193565b8152610b8660208401610b13565b60208201526040830135610b9981611193565b6040820152610baa60608401610b13565b60608201525092915050565b600060208284031215610bc7578081fd5b8135610bd281611193565b9392505050565b60006020808385031215610beb578182fd5b825167ffffffffffffffff811115610c01578283fd5b8301601f81018513610c11578283fd5b8051610c1f610a1b82611175565b8181528381019083850185840285018601891015610c3b578687fd5b8694505b83851015610c5d578051835260019490940193918501918501610c3f565b50979650505050505050565b60008060208385031215610c7b578081fd5b823567ffffffffffffffff80821115610c92578283fd5b818501915085601f830112610ca5578283fd5b813581811115610cb3578384fd5b866020608083028501011115610cc7578384fd5b60209290920196919550909350505050565b6000806000806000806000806101a0898b031215610cf5578384fd5b883560028110610d03578485fd5b9750602089013567ffffffffffffffff80821115610d1f578586fd5b610d2b8c838d01610aca565b909950975060408b0135915080821115610d43578586fd5b610d4f8c838d016109fb565b9650610d5e8c60608d01610b39565b955060e08b0135915080821115610d73578485fd5b50610d808b828c01610a70565b9350506101008901359150610d998a6101208b01610b28565b90509295985092959890939650565b6000815180845260208085019450808401835b83811015610ded57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101610dbb565b509495945050505050565b6000815180845260208085019450808401835b83811015610ded57815187529582019590820190600101610e0b565b600082845282826020860137806020848601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011685010190509392505050565b73ffffffffffffffffffffffffffffffffffffffff808251168352602082015115156020840152806040830151166040840152506060810151151560608301525050565b600060208252610bd26020830184610df8565b602080825282518282018190526000919060409081850190868401855b82811015610f4c578151805160048110610ef957fe5b85528087015173ffffffffffffffffffffffffffffffffffffffff908116888701528682015187870152606080830151821690870152608091820151169085015260a09093019290850190600101610ee3565b5091979650505050505050565b600061012080830160028b10610f6b57fe5b8a8452602080850192909252889052610140808401918981028501909101908a845b8b811015611098577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec087850301855281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618e3603018112610fed578687fd5b8d01803585528381013584860152604080820135908601526060808201359086015260a0608080830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261104757898afd5b8301803567ffffffffffffffff81111561105f578a8bfd5b80360385131561106d578a8bfd5b83838a0152611081848a01828a8501610e27565b998801999850505093850193505050600101610f8d565b50505083810360408501526110ad8189610da8565b9150506110bd6060840187610e6f565b82810360e08401526110cf8186610df8565b9150508261010083015298975050505050505050565b60208082526011908201527f475076323a206e6f742063726561746f72000000000000000000000000000000604082015260600190565b6020808252818101527f475076323a2063616e6e6f74207472616e73666572206e617469766520455448604082015260600190565b60405181810167ffffffffffffffff8111828210171561116d57fe5b604052919050565b600067ffffffffffffffff82111561118957fe5b5060209081020190565b73ffffffffffffffffffffffffffffffffffffffff811681146111b557600080fd5b5056fea2646970667358221220364a6941bea69620b7dc3a957d0ab4cbf3bfc459c7ad3924d220620aca9202fc64736f6c63430007060033",
@@ -686,5 +593,100 @@
"kind": "user",
"methods": {},
"version": 1
- }
-}
\ No newline at end of file
+ },
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "bytes[]",
+ "name": "orderUids",
+ "type": "bytes[]"
+ }
+ ],
+ "name": "freeFilledAmountStorage",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes[]",
+ "name": "orderUids",
+ "type": "bytes[]"
+ }
+ ],
+ "name": "freePreSignatureStorage",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "offset",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "length",
+ "type": "uint256"
+ }
+ ],
+ "name": "getStorageAt",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "name": "preSignature",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "targetContract",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "calldataPayload",
+ "type": "bytes"
+ }
+ ],
+ "name": "simulateDelegatecallInternal",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "response",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ]
+}
diff --git a/crates/contracts/artifacts/GasHog.json b/contracts/artifacts/GasHog.json
similarity index 100%
rename from crates/contracts/artifacts/GasHog.json
rename to contracts/artifacts/GasHog.json
diff --git a/crates/contracts/artifacts/GnosisSafe.json b/contracts/artifacts/GnosisSafe.json
similarity index 99%
rename from crates/contracts/artifacts/GnosisSafe.json
rename to contracts/artifacts/GnosisSafe.json
index fe0534044e..a356fbec4f 100644
--- a/crates/contracts/artifacts/GnosisSafe.json
+++ b/contracts/artifacts/GnosisSafe.json
@@ -252,6 +252,10 @@
"stateMutability": "nonpayable",
"type": "fallback"
},
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ },
{
"inputs": [],
"name": "VERSION",
@@ -265,6 +269,147 @@
"stateMutability": "view",
"type": "function"
},
+ {
+ "inputs": [],
+ "name": "domainSeparator",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "enum Enum.Operation",
+ "name": "operation",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint256",
+ "name": "safeTxGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "baseGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "gasPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "gasToken",
+ "type": "address"
+ },
+ {
+ "internalType": "address payable",
+ "name": "refundReceiver",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signatures",
+ "type": "bytes"
+ }
+ ],
+ "name": "execTransaction",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "success",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "nonce",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "_owners",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_threshold",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "address",
+ "name": "fallbackHandler",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "paymentToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "payment",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address payable",
+ "name": "paymentReceiver",
+ "type": "address"
+ }
+ ],
+ "name": "setup",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x608060405234801561001057600080fd5b5060016004819055506159ae80620000296000396000f3fe6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612440565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612512565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6125e4565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506125f1565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506127d7565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b81019080803590602001909291908035906020019092919050505061280d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b8101908080359060200190929190505050612894565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ac565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612c3e565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612d78565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132b5565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506132da565b005b348015610d3457600080fd5b50610d3d613369565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613512565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613518565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061353a565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff1690602001909291905050506136f8565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613820565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613a12565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613bb1565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613bde565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f6f565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ff3565b005b34801561148957600080fd5b50611492614665565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061466f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614817565b005b3480156116a457600080fd5b506116ad614878565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506148f6565b005b34801561174a57600080fd5b50611753614d29565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614d62565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612c3e565b5b5050565b611bd2604182614e0590919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b8681101561243457611c648882614e3f565b80945081955082965050505060008460ff16141561206d578260001c9450611c96604188614e0590919063ffffffff16565b8260001c1015611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611d2760208460001c614e6e90919063ffffffff16565b1115611d9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611dd182611dc360208760001c614e6e90919063ffffffff16565b614e6e90919063ffffffff16565b1115611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee7578082015181840152602081019050611ecc565b50505050905090810190601f168015611f145780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f4d578082015181840152602081019050611f32565b50505050905090810190601f168015611f7a5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b2565b60018460ff161415612181578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061210a57506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b61217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b1565b601e8460ff1611156122495760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612238573d6000803e3d6000fd5b5050506020604051035194506122b0565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a3573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161180156123795750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123b25750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b612424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611c52565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff161415801561250b5750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125dd5750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156126bc5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b61272e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61273b858585855a614e8d565b9050801561278b573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a26127cf565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b600060606127e7868686866125f1565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561282b57600080fd5b506040519080825280601f01601f19166020018201604052801561285e5781602001600182028036833780820191505090505b50905060005b8381101561288957808501548060208302602085010152508080600101915050612864565b508091505092915050565b60076020528060005260406000206000915090505481565b6128b4614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561291e5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612990576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612c46614d62565b600354811115612cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000806000612d928e8e8e8e8e8e8e8e8e8e60055461466f565b905060056000815480929190600101919050555080805190602001209150612dbb8282866132da565b506000612dc6614ed9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612fac578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612e6957fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015612f3b578082015181840152602081019050612f20565b50505050905090810190601f168015612f685780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015612f9357600080fd5b505af1158015612fa7573d6000803e3d6000fd5b505050505b6101f4612fd36109c48b01603f60408d0281612fc457fe5b04614f0a90919063ffffffff16565b015a1015613049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a90506130b28f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d146130a7578e6130ad565b6109c45a035b614e8d565b93506130c75a82614f2490919063ffffffff16565b905083806130d6575060008a14155b806130e2575060008814155b613154576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008089111561316e5761316b828b8b8b8b614f44565b90505b84156131b8577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a16131f8565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146132a4578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b15801561328b57600080fd5b505af115801561329f573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111613357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61336384848484611bbe565b50505050565b6060600060035467ffffffffffffffff8111801561338657600080fd5b506040519080825280602002602001820160405280156133b55781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613509578083838151811061346057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050818060010192505061341f565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6135858a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508961514a565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146135c3576135c28461564a565b5b6136118787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615679565b600082111561362b5761362982600060018685614f44565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a905061374f878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a614e8d565b61375857600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137e55780820151818401526020810190506137ca565b50505050905090810190601f1680156138125780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561383b57600080fd5b5060405190808252806020026020018201604052801561386a5781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561393d5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561394857508482105b15613a03578084838151811061395a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506138d3565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613b14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b6000613bc68c8c8c8c8c8c8c8c8c8c8c61466f565b8051906020012090509b9a5050505050505050505050565b613be6614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c505750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613cc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613dc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613f77614d62565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613ffb614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156140655750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561409d57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61410f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614210576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561427a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6142ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146143ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561470057fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b61478c614878565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b61481f614d62565b6148288161564a565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6148a66125e4565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b6148fe614d62565b806001600354031015614979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156149e35750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614a55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614b55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414614d2457614d2381612c3e565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614e185760009050614e39565b6000828402905082848281614e2957fe5b0414614e3457600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614e8357600080fd5b8091505092915050565b6000600180811115614e9b57fe5b836001811115614ea757fe5b1415614ec0576000808551602087018986f49050614ed0565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015614f1a5781614f1c565b825b905092915050565b600082821115614f3357600080fd5b600082840390508091505092915050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614614f815782614f83565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561509b57614fed3a8610614fca573a614fcc565b855b614fdf888a614e6e90919063ffffffff16565b614e0590919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615140565b6150c0856150b2888a614e6e90919063ffffffff16565b614e0590919063ffffffff16565b91506150cd8482846158b4565b61513f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600454146151c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8151811115615239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018110156152b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b83518110156155b65760008482815181106152d057fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156153445750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561537c57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156153b457508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b615426576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092505080806001019150506152b9565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461577b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146158b05761583d8260008360015a614e8d565b6158af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d6000811461595b5760208114615963576000935061596e565b81935061596e565b600051158215171593505b505050939250505056fea26469706673582212203874bcf92e1722cc7bfa0cef1a0985cf0dc3485ba0663db3747ccdf1605df53464736f6c63430007060033",
+ "_disabled": [
{
"inputs": [
{
@@ -402,19 +547,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [],
- "name": "domainSeparator",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -492,70 +624,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "to",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
- },
- {
- "internalType": "enum Enum.Operation",
- "name": "operation",
- "type": "uint8"
- },
- {
- "internalType": "uint256",
- "name": "safeTxGas",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "baseGas",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "gasPrice",
- "type": "uint256"
- },
- {
- "internalType": "address",
- "name": "gasToken",
- "type": "address"
- },
- {
- "internalType": "address payable",
- "name": "refundReceiver",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "signatures",
- "type": "bytes"
- }
- ],
- "name": "execTransaction",
- "outputs": [
- {
- "internalType": "bool",
- "name": "success",
- "type": "bool"
- }
- ],
- "stateMutability": "payable",
- "type": "function"
- },
{
"inputs": [
{
@@ -823,19 +891,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [],
- "name": "nonce",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -919,54 +974,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address[]",
- "name": "_owners",
- "type": "address[]"
- },
- {
- "internalType": "uint256",
- "name": "_threshold",
- "type": "uint256"
- },
- {
- "internalType": "address",
- "name": "to",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
- },
- {
- "internalType": "address",
- "name": "fallbackHandler",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "paymentToken",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "payment",
- "type": "uint256"
- },
- {
- "internalType": "address payable",
- "name": "paymentReceiver",
- "type": "address"
- }
- ],
- "name": "setup",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -1026,11 +1033,6 @@
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
- },
- {
- "stateMutability": "payable",
- "type": "receive"
}
- ],
- "bytecode": "0x608060405234801561001057600080fd5b5060016004819055506159ae80620000296000396000f3fe6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612440565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612512565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6125e4565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506125f1565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506127d7565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b81019080803590602001909291908035906020019092919050505061280d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b8101908080359060200190929190505050612894565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ac565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612c3e565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612d78565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132b5565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506132da565b005b348015610d3457600080fd5b50610d3d613369565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613512565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613518565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061353a565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff1690602001909291905050506136f8565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613820565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613a12565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613bb1565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613bde565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f6f565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ff3565b005b34801561148957600080fd5b50611492614665565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061466f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614817565b005b3480156116a457600080fd5b506116ad614878565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506148f6565b005b34801561174a57600080fd5b50611753614d29565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614d62565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612c3e565b5b5050565b611bd2604182614e0590919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b8681101561243457611c648882614e3f565b80945081955082965050505060008460ff16141561206d578260001c9450611c96604188614e0590919063ffffffff16565b8260001c1015611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611d2760208460001c614e6e90919063ffffffff16565b1115611d9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611dd182611dc360208760001c614e6e90919063ffffffff16565b614e6e90919063ffffffff16565b1115611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee7578082015181840152602081019050611ecc565b50505050905090810190601f168015611f145780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f4d578082015181840152602081019050611f32565b50505050905090810190601f168015611f7a5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b2565b60018460ff161415612181578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061210a57506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b61217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b1565b601e8460ff1611156122495760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612238573d6000803e3d6000fd5b5050506020604051035194506122b0565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a3573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161180156123795750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123b25750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b612424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611c52565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff161415801561250b5750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125dd5750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156126bc5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b61272e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61273b858585855a614e8d565b9050801561278b573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a26127cf565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b600060606127e7868686866125f1565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561282b57600080fd5b506040519080825280601f01601f19166020018201604052801561285e5781602001600182028036833780820191505090505b50905060005b8381101561288957808501548060208302602085010152508080600101915050612864565b508091505092915050565b60076020528060005260406000206000915090505481565b6128b4614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561291e5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612990576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612c46614d62565b600354811115612cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000806000612d928e8e8e8e8e8e8e8e8e8e60055461466f565b905060056000815480929190600101919050555080805190602001209150612dbb8282866132da565b506000612dc6614ed9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612fac578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612e6957fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015612f3b578082015181840152602081019050612f20565b50505050905090810190601f168015612f685780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015612f9357600080fd5b505af1158015612fa7573d6000803e3d6000fd5b505050505b6101f4612fd36109c48b01603f60408d0281612fc457fe5b04614f0a90919063ffffffff16565b015a1015613049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a90506130b28f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d146130a7578e6130ad565b6109c45a035b614e8d565b93506130c75a82614f2490919063ffffffff16565b905083806130d6575060008a14155b806130e2575060008814155b613154576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008089111561316e5761316b828b8b8b8b614f44565b90505b84156131b8577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a16131f8565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146132a4578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b15801561328b57600080fd5b505af115801561329f573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111613357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61336384848484611bbe565b50505050565b6060600060035467ffffffffffffffff8111801561338657600080fd5b506040519080825280602002602001820160405280156133b55781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613509578083838151811061346057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050818060010192505061341f565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6135858a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508961514a565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146135c3576135c28461564a565b5b6136118787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615679565b600082111561362b5761362982600060018685614f44565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a905061374f878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a614e8d565b61375857600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137e55780820151818401526020810190506137ca565b50505050905090810190601f1680156138125780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561383b57600080fd5b5060405190808252806020026020018201604052801561386a5781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561393d5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561394857508482105b15613a03578084838151811061395a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506138d3565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613b14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b6000613bc68c8c8c8c8c8c8c8c8c8c8c61466f565b8051906020012090509b9a5050505050505050505050565b613be6614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c505750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613cc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613dc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613f77614d62565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613ffb614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156140655750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561409d57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61410f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614210576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561427a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6142ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146143ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561470057fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b61478c614878565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b61481f614d62565b6148288161564a565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6148a66125e4565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b6148fe614d62565b806001600354031015614979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156149e35750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614a55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614b55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414614d2457614d2381612c3e565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614e185760009050614e39565b6000828402905082848281614e2957fe5b0414614e3457600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614e8357600080fd5b8091505092915050565b6000600180811115614e9b57fe5b836001811115614ea757fe5b1415614ec0576000808551602087018986f49050614ed0565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015614f1a5781614f1c565b825b905092915050565b600082821115614f3357600080fd5b600082840390508091505092915050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614614f815782614f83565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561509b57614fed3a8610614fca573a614fcc565b855b614fdf888a614e6e90919063ffffffff16565b614e0590919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615140565b6150c0856150b2888a614e6e90919063ffffffff16565b614e0590919063ffffffff16565b91506150cd8482846158b4565b61513f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600454146151c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8151811115615239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018110156152b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b83518110156155b65760008482815181106152d057fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156153445750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561537c57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156153b457508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b615426576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092505080806001019150506152b9565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461577b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146158b05761583d8260008360015a614e8d565b6158af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d6000811461595b5760208114615963576000935061596e565b81935061596e565b600051158215171593505b505050939250505056fea26469706673582212203874bcf92e1722cc7bfa0cef1a0985cf0dc3485ba0663db3747ccdf1605df53464736f6c63430007060033"
-}
\ No newline at end of file
+ ]
+}
diff --git a/crates/contracts/artifacts/GnosisSafeCompatibilityFallbackHandler.json b/contracts/artifacts/GnosisSafeCompatibilityFallbackHandler.json
similarity index 99%
rename from crates/contracts/artifacts/GnosisSafeCompatibilityFallbackHandler.json
rename to contracts/artifacts/GnosisSafeCompatibilityFallbackHandler.json
index 05cb02bd4f..d539a2309a 100644
--- a/crates/contracts/artifacts/GnosisSafeCompatibilityFallbackHandler.json
+++ b/contracts/artifacts/GnosisSafeCompatibilityFallbackHandler.json
@@ -28,18 +28,23 @@
},
{
"inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "_dataHash",
+ "type": "bytes32"
+ },
{
"internalType": "bytes",
- "name": "message",
+ "name": "_signature",
"type": "bytes"
}
],
- "name": "getMessageHash",
+ "name": "isValidSignature",
"outputs": [
{
- "internalType": "bytes32",
+ "internalType": "bytes4",
"name": "",
- "type": "bytes32"
+ "type": "bytes4"
}
],
"stateMutability": "view",
@@ -48,59 +53,68 @@
{
"inputs": [
{
- "internalType": "contract GnosisSafe",
- "name": "safe",
- "type": "address"
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
},
{
"internalType": "bytes",
- "name": "message",
+ "name": "_signature",
"type": "bytes"
}
],
- "name": "getMessageHashForSafe",
+ "name": "isValidSignature",
"outputs": [
{
- "internalType": "bytes32",
+ "internalType": "bytes4",
"name": "",
- "type": "bytes32"
+ "type": "bytes4"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [],
- "name": "getModules",
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "targetContract",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "calldataPayload",
+ "type": "bytes"
+ }
+ ],
+ "name": "simulate",
"outputs": [
{
- "internalType": "address[]",
- "name": "",
- "type": "address[]"
+ "internalType": "bytes",
+ "name": "response",
+ "type": "bytes"
}
],
- "stateMutability": "view",
+ "stateMutability": "nonpayable",
"type": "function"
- },
+ }
+ ],
+ "bytecode": "0x608060405234801561001057600080fd5b50611574806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ce5760003560e01c80636ac247841161008c578063bc197c8111610066578063bc197c81146107bb578063bd61951d14610951578063f23a6e6114610a63578063ffa1ad7414610b63576100ce565b80636ac24784146105ea578063a3f4df7e146106d9578063b2494df31461075c576100ce565b806223de29146100d357806301ffc9a71461020b5780630a1028c41461026e578063150b7a021461033d5780631626ba7e1461043357806320c13b0b146104e9575b600080fd5b610209600480360360c08110156100e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561017057600080fd5b82018360208201111561018257600080fd5b803590602001918460018302840111640100000000831117156101a457600080fd5b9091929391929390803590602001906401000000008111156101c557600080fd5b8201836020820111156101d757600080fd5b803590602001918460018302840111640100000000831117156101f957600080fd5b9091929391929390505050610be6565b005b6102566004803603602081101561022157600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bf0565b60405180821515815260200191505060405180910390f35b6103276004803603602081101561028457600080fd5b81019080803590602001906401000000008111156102a157600080fd5b8201836020820111156102b357600080fd5b803590602001918460018302840111640100000000831117156102d557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d2a565b6040518082815260200191505060405180910390f35b6103fe6004803603608081101561035357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156103ba57600080fd5b8201836020820111156103cc57600080fd5b803590602001918460018302840111640100000000831117156103ee57600080fd5b9091929391929390505050610d3d565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6104b46004803603604081101561044957600080fd5b81019080803590602001909291908035906020019064010000000081111561047057600080fd5b82018360208201111561048257600080fd5b803590602001918460018302840111640100000000831117156104a457600080fd5b9091929391929390505050610d52565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6105b5600480360360408110156104ff57600080fd5b810190808035906020019064010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184600183028401116401000000008311171561055057600080fd5b90919293919293908035906020019064010000000081111561057157600080fd5b82018360208201111561058357600080fd5b803590602001918460018302840111640100000000831117156105a557600080fd5b9091929391929390505050610f0a565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6106c36004803603604081101561060057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561063d57600080fd5b82018360208201111561064f57600080fd5b8035906020019184600183028401116401000000008311171561067157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061115b565b6040518082815260200191505060405180910390f35b6106e16112cd565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610721578082015181840152602081019050610706565b50505050905090810190601f16801561074e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610764611306565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156107a757808201518184015260208101905061078c565b505050509050019250505060405180910390f35b61091c600480360360a08110156107d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561082e57600080fd5b82018360208201111561084057600080fd5b8035906020019184602083028401116401000000008311171561086257600080fd5b90919293919293908035906020019064010000000081111561088357600080fd5b82018360208201111561089557600080fd5b803590602001918460208302840111640100000000831117156108b757600080fd5b9091929391929390803590602001906401000000008111156108d857600080fd5b8201836020820111156108ea57600080fd5b8035906020019184600183028401116401000000008311171561090c57600080fd5b909192939192939050505061146d565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6109e86004803603604081101561096757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156109a457600080fd5b8201836020820111156109b657600080fd5b803590602001918460018302840111640100000000831117156109d857600080fd5b9091929391929390505050611485565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a28578082015181840152602081019050610a0d565b50505050905090810190601f168015610a555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b2e600480360360a0811015610a7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610aea57600080fd5b820183602082011115610afc57600080fd5b80359060200191846001830284011164010000000083111715610b1e57600080fd5b90919293919293905050506114ef565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b610b6b611505565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bab578082015181840152602081019050610b90565b50505050905090810190601f168015610bd85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b5050505050505050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cbb57507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d2357507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000610d36338361115b565b9050919050565b600063150b7a0260e01b905095945050505050565b60008033905060008173ffffffffffffffffffffffffffffffffffffffff166320c13b0b876040516020018082815260200191505060405160208183030381529060405287876040518463ffffffff1660e01b8152600401808060200180602001838103835286818151815260200191508051906020019080838360005b83811015610deb578082015181840152602081019050610dd0565b50505050905090810190601f168015610e185780820380516001836020036101000a031916815260200191505b508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060206040518083038186803b158015610e6357600080fd5b505afa158015610e77573d6000803e3d6000fd5b505050506040513d6020811015610e8d57600080fd5b810190808051906020019092919050505090506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610ef657600060e01b610eff565b631626ba7e60e01b5b925050509392505050565b6000803390506000610f608288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061115b565b905060008585905014156110755760008273ffffffffffffffffffffffffffffffffffffffff16635ae6bd37836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610fc157600080fd5b505afa158015610fd5573d6000803e3d6000fd5b505050506040513d6020811015610feb57600080fd5b81019080805190602001909291905050501415611070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f48617368206e6f7420617070726f76656400000000000000000000000000000081525060200191505060405180910390fd5b611147565b8173ffffffffffffffffffffffffffffffffffffffff1663934f3a1182898989896040518663ffffffff1660e01b81526004018086815260200180602001806020018381038352878782818152602001925080828437600081840152601f19601f8201169050808301925050508381038252858582818152602001925080828437600081840152601f19601f82011690508083019250505097505050505050505060006040518083038186803b15801561112e57600080fd5b505afa158015611142573d6000803e3d6000fd5b505050505b6320c13b0b60e01b92505050949350505050565b6000807f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60001b83805190602001206040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050601960f81b600160f81b8573ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b15801561120957600080fd5b505afa15801561121d573d6000803e3d6000fd5b505050506040513d602081101561123357600080fd5b81019080805190602001909291905050508360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040528051906020012091505092915050565b6040518060400160405280601881526020017f44656661756c742043616c6c6261636b2048616e646c6572000000000000000081525081565b6060600033905060008173ffffffffffffffffffffffffffffffffffffffff1663cc2f84526001600a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060006040518083038186803b15801561138057600080fd5b505afa158015611394573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060408110156113be57600080fd5b81019080805160405193929190846401000000008211156113de57600080fd5b838201915060208201858111156113f457600080fd5b825186602082028301116401000000008211171561141157600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561144857808201518184015260208101905061142d565b5050505090500160405260200180519060200190929190505050509050809250505090565b600063bc197c8160e01b905098975050505050505050565b60606040517fb4faba09000000000000000000000000000000000000000000000000000000008152600436036004808301376020600036836000335af15060203d036040519250808301604052806020843e6000516114e657825160208401fd5b50509392505050565b600063f23a6e6160e01b90509695505050505050565b6040518060400160405280600581526020017f312e302e300000000000000000000000000000000000000000000000000000008152508156fea26469706673582212204251d58f2a197439239faafa82818b7696d25bb75655794a81cc773a0e39ed2b64736f6c63430007060033",
+ "_disabled": [
{
"inputs": [
- {
- "internalType": "bytes32",
- "name": "_dataHash",
- "type": "bytes32"
- },
{
"internalType": "bytes",
- "name": "_signature",
+ "name": "message",
"type": "bytes"
}
],
- "name": "isValidSignature",
+ "name": "getMessageHash",
"outputs": [
{
- "internalType": "bytes4",
+ "internalType": "bytes32",
"name": "",
- "type": "bytes4"
+ "type": "bytes32"
}
],
"stateMutability": "view",
@@ -109,22 +123,35 @@
{
"inputs": [
{
- "internalType": "bytes",
- "name": "_data",
- "type": "bytes"
+ "internalType": "contract GnosisSafe",
+ "name": "safe",
+ "type": "address"
},
{
"internalType": "bytes",
- "name": "_signature",
+ "name": "message",
"type": "bytes"
}
],
- "name": "isValidSignature",
+ "name": "getMessageHashForSafe",
"outputs": [
{
- "internalType": "bytes4",
+ "internalType": "bytes32",
"name": "",
- "type": "bytes4"
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getModules",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "",
+ "type": "address[]"
}
],
"stateMutability": "view",
@@ -242,30 +269,6 @@
"stateMutability": "pure",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "targetContract",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "calldataPayload",
- "type": "bytes"
- }
- ],
- "name": "simulate",
- "outputs": [
- {
- "internalType": "bytes",
- "name": "response",
- "type": "bytes"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -323,6 +326,5 @@
"stateMutability": "pure",
"type": "function"
}
- ],
- "bytecode": "0x608060405234801561001057600080fd5b50611574806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ce5760003560e01c80636ac247841161008c578063bc197c8111610066578063bc197c81146107bb578063bd61951d14610951578063f23a6e6114610a63578063ffa1ad7414610b63576100ce565b80636ac24784146105ea578063a3f4df7e146106d9578063b2494df31461075c576100ce565b806223de29146100d357806301ffc9a71461020b5780630a1028c41461026e578063150b7a021461033d5780631626ba7e1461043357806320c13b0b146104e9575b600080fd5b610209600480360360c08110156100e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561017057600080fd5b82018360208201111561018257600080fd5b803590602001918460018302840111640100000000831117156101a457600080fd5b9091929391929390803590602001906401000000008111156101c557600080fd5b8201836020820111156101d757600080fd5b803590602001918460018302840111640100000000831117156101f957600080fd5b9091929391929390505050610be6565b005b6102566004803603602081101561022157600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bf0565b60405180821515815260200191505060405180910390f35b6103276004803603602081101561028457600080fd5b81019080803590602001906401000000008111156102a157600080fd5b8201836020820111156102b357600080fd5b803590602001918460018302840111640100000000831117156102d557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d2a565b6040518082815260200191505060405180910390f35b6103fe6004803603608081101561035357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156103ba57600080fd5b8201836020820111156103cc57600080fd5b803590602001918460018302840111640100000000831117156103ee57600080fd5b9091929391929390505050610d3d565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6104b46004803603604081101561044957600080fd5b81019080803590602001909291908035906020019064010000000081111561047057600080fd5b82018360208201111561048257600080fd5b803590602001918460018302840111640100000000831117156104a457600080fd5b9091929391929390505050610d52565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6105b5600480360360408110156104ff57600080fd5b810190808035906020019064010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184600183028401116401000000008311171561055057600080fd5b90919293919293908035906020019064010000000081111561057157600080fd5b82018360208201111561058357600080fd5b803590602001918460018302840111640100000000831117156105a557600080fd5b9091929391929390505050610f0a565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6106c36004803603604081101561060057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561063d57600080fd5b82018360208201111561064f57600080fd5b8035906020019184600183028401116401000000008311171561067157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061115b565b6040518082815260200191505060405180910390f35b6106e16112cd565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610721578082015181840152602081019050610706565b50505050905090810190601f16801561074e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610764611306565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156107a757808201518184015260208101905061078c565b505050509050019250505060405180910390f35b61091c600480360360a08110156107d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561082e57600080fd5b82018360208201111561084057600080fd5b8035906020019184602083028401116401000000008311171561086257600080fd5b90919293919293908035906020019064010000000081111561088357600080fd5b82018360208201111561089557600080fd5b803590602001918460208302840111640100000000831117156108b757600080fd5b9091929391929390803590602001906401000000008111156108d857600080fd5b8201836020820111156108ea57600080fd5b8035906020019184600183028401116401000000008311171561090c57600080fd5b909192939192939050505061146d565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6109e86004803603604081101561096757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156109a457600080fd5b8201836020820111156109b657600080fd5b803590602001918460018302840111640100000000831117156109d857600080fd5b9091929391929390505050611485565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a28578082015181840152602081019050610a0d565b50505050905090810190601f168015610a555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b2e600480360360a0811015610a7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610aea57600080fd5b820183602082011115610afc57600080fd5b80359060200191846001830284011164010000000083111715610b1e57600080fd5b90919293919293905050506114ef565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b610b6b611505565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bab578082015181840152602081019050610b90565b50505050905090810190601f168015610bd85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b5050505050505050565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cbb57507f150b7a02000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d2357507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000610d36338361115b565b9050919050565b600063150b7a0260e01b905095945050505050565b60008033905060008173ffffffffffffffffffffffffffffffffffffffff166320c13b0b876040516020018082815260200191505060405160208183030381529060405287876040518463ffffffff1660e01b8152600401808060200180602001838103835286818151815260200191508051906020019080838360005b83811015610deb578082015181840152602081019050610dd0565b50505050905090810190601f168015610e185780820380516001836020036101000a031916815260200191505b508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060206040518083038186803b158015610e6357600080fd5b505afa158015610e77573d6000803e3d6000fd5b505050506040513d6020811015610e8d57600080fd5b810190808051906020019092919050505090506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610ef657600060e01b610eff565b631626ba7e60e01b5b925050509392505050565b6000803390506000610f608288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061115b565b905060008585905014156110755760008273ffffffffffffffffffffffffffffffffffffffff16635ae6bd37836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610fc157600080fd5b505afa158015610fd5573d6000803e3d6000fd5b505050506040513d6020811015610feb57600080fd5b81019080805190602001909291905050501415611070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f48617368206e6f7420617070726f76656400000000000000000000000000000081525060200191505060405180910390fd5b611147565b8173ffffffffffffffffffffffffffffffffffffffff1663934f3a1182898989896040518663ffffffff1660e01b81526004018086815260200180602001806020018381038352878782818152602001925080828437600081840152601f19601f8201169050808301925050508381038252858582818152602001925080828437600081840152601f19601f82011690508083019250505097505050505050505060006040518083038186803b15801561112e57600080fd5b505afa158015611142573d6000803e3d6000fd5b505050505b6320c13b0b60e01b92505050949350505050565b6000807f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca60001b83805190602001206040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050601960f81b600160f81b8573ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b15801561120957600080fd5b505afa15801561121d573d6000803e3d6000fd5b505050506040513d602081101561123357600080fd5b81019080805190602001909291905050508360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040528051906020012091505092915050565b6040518060400160405280601881526020017f44656661756c742043616c6c6261636b2048616e646c6572000000000000000081525081565b6060600033905060008173ffffffffffffffffffffffffffffffffffffffff1663cc2f84526001600a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060006040518083038186803b15801561138057600080fd5b505afa158015611394573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525060408110156113be57600080fd5b81019080805160405193929190846401000000008211156113de57600080fd5b838201915060208201858111156113f457600080fd5b825186602082028301116401000000008211171561141157600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561144857808201518184015260208101905061142d565b5050505090500160405260200180519060200190929190505050509050809250505090565b600063bc197c8160e01b905098975050505050505050565b60606040517fb4faba09000000000000000000000000000000000000000000000000000000008152600436036004808301376020600036836000335af15060203d036040519250808301604052806020843e6000516114e657825160208401fd5b50509392505050565b600063f23a6e6160e01b90509695505050505050565b6040518060400160405280600581526020017f312e302e300000000000000000000000000000000000000000000000000000008152508156fea26469706673582212204251d58f2a197439239faafa82818b7696d25bb75655794a81cc773a0e39ed2b64736f6c63430007060033"
-}
\ No newline at end of file
+ ]
+}
diff --git a/crates/contracts/artifacts/GnosisSafeProxy.json b/contracts/artifacts/GnosisSafeProxy.json
similarity index 100%
rename from crates/contracts/artifacts/GnosisSafeProxy.json
rename to contracts/artifacts/GnosisSafeProxy.json
diff --git a/crates/contracts/artifacts/GnosisSafeProxyFactory.json b/contracts/artifacts/GnosisSafeProxyFactory.json
similarity index 99%
rename from crates/contracts/artifacts/GnosisSafeProxyFactory.json
rename to contracts/artifacts/GnosisSafeProxyFactory.json
index 0b019cea1f..c97bd6cdcb 100644
--- a/crates/contracts/artifacts/GnosisSafeProxyFactory.json
+++ b/contracts/artifacts/GnosisSafeProxyFactory.json
@@ -23,21 +23,16 @@
"inputs": [
{
"internalType": "address",
- "name": "_singleton",
+ "name": "singleton",
"type": "address"
},
{
"internalType": "bytes",
- "name": "initializer",
+ "name": "data",
"type": "bytes"
- },
- {
- "internalType": "uint256",
- "name": "saltNonce",
- "type": "uint256"
}
],
- "name": "calculateCreateProxyWithNonceAddress",
+ "name": "createProxy",
"outputs": [
{
"internalType": "contract GnosisSafeProxy",
@@ -47,21 +42,29 @@
],
"stateMutability": "nonpayable",
"type": "function"
- },
+ }
+ ],
+ "bytecode": "0x608060405234801561001057600080fd5b50610ebe806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80631688f0b9146100675780632500510e1461017657806353e5d9351461024357806361b69abd146102c6578063addacc0f146103cb578063d18af54d1461044e575b600080fd5b61014a6004803603606081101561007d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100ba57600080fd5b8201836020820111156100cc57600080fd5b803590602001918460018302840111640100000000831117156100ee57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061057d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102176004803603606081101561018c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156101c957600080fd5b8201836020820111156101db57600080fd5b803590602001918460018302840111640100000000831117156101fd57600080fd5b909192939192939080359060200190929190505050610624565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61024b610751565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561028b578082015181840152602081019050610270565b50505050905090810190601f1680156102b85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61039f600480360360408110156102dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561031957600080fd5b82018360208201111561032b57600080fd5b8035906020019184600183028401116401000000008311171561034d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061077c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103d3610861565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104135780820151818401526020810190506103f8565b50505050905090810190601f1680156104405780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105516004803603608081101561046457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104a157600080fd5b8201836020820111156104b357600080fd5b803590602001918460018302840111640100000000831117156104d557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061088c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600061058a848484610a3b565b90506000835111156105b25760008060008551602087016000865af114156105b157600080fd5b5b7f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e2358185604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a19392505050565b60006106758585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505084610a3b565b905080604051602001808273ffffffffffffffffffffffffffffffffffffffff1660601b81526014019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156107165780820151818401526020810190506106fb565b50505050905090810190601f1680156107435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60606040518060200161076390610bde565b6020820181038252601f19601f82011660405250905090565b60008260405161078b90610bde565b808273ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f0801580156107c7573d6000803e3d6000fd5b5090506000825111156107f05760008060008451602086016000865af114156107ef57600080fd5b5b7f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e2358184604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a192915050565b60606040518060200161087390610beb565b6020820181038252601f19601f82011660405250905090565b6000808383604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012060001c90506108e786868361057d565b9150600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a32578273ffffffffffffffffffffffffffffffffffffffff16631e52b518838888886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156109ca5780820151818401526020810190506109af565b50505050905090810190601f1680156109f75780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610a1957600080fd5b505af1158015610a2d573d6000803e3d6000fd5b505050505b50949350505050565b6000808380519060200120836040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050600060405180602001610a8890610bde565b6020820181038252601f19601f820116604052508673ffffffffffffffffffffffffffffffffffffffff166040516020018083805190602001908083835b60208310610ae95780518252602082019150602081019050602083039250610ac6565b6001836020036101000a038019825116818451168082178552505050505050905001828152602001925050506040516020818303038152906040529050818151826020016000f59250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f437265617465322063616c6c206661696c65640000000000000000000000000081525060200191505060405180910390fd5b50509392505050565b6101e680610bf883390190565b60ab80610dde8339019056fe608060405234801561001057600080fd5b506040516101e63803806101e68339818101604052602081101561003357600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806101c46022913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060ab806101196000396000f3fe608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003514156050578060005260206000f35b3660008037600080366000845af43d6000803e60008114156070573d6000fd5b3d6000f3fea2646970667358221220d1429297349653a4918076d650332de1a1068c5f3e07c5c82360c277770b955264736f6c63430007060033496e76616c69642073696e676c65746f6e20616464726573732070726f7669646564608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003514156050578060005260206000f35b3660008037600080366000845af43d6000803e60008114156070573d6000fd5b3d6000f3fea2646970667358221220d1429297349653a4918076d650332de1a1068c5f3e07c5c82360c277770b955264736f6c63430007060033a26469706673582212200c75fe2196b9f752c82794253f2ebce0d821afef5997e1d5a35ec316ce592f6664736f6c63430007060033",
+ "_disabled": [
{
"inputs": [
{
"internalType": "address",
- "name": "singleton",
+ "name": "_singleton",
"type": "address"
},
{
"internalType": "bytes",
- "name": "data",
+ "name": "initializer",
"type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "saltNonce",
+ "type": "uint256"
}
],
- "name": "createProxy",
+ "name": "calculateCreateProxyWithNonceAddress",
"outputs": [
{
"internalType": "contract GnosisSafeProxy",
@@ -161,6 +164,5 @@
"stateMutability": "pure",
"type": "function"
}
- ],
- "bytecode": "0x608060405234801561001057600080fd5b50610ebe806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80631688f0b9146100675780632500510e1461017657806353e5d9351461024357806361b69abd146102c6578063addacc0f146103cb578063d18af54d1461044e575b600080fd5b61014a6004803603606081101561007d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100ba57600080fd5b8201836020820111156100cc57600080fd5b803590602001918460018302840111640100000000831117156100ee57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061057d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102176004803603606081101561018c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156101c957600080fd5b8201836020820111156101db57600080fd5b803590602001918460018302840111640100000000831117156101fd57600080fd5b909192939192939080359060200190929190505050610624565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61024b610751565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561028b578082015181840152602081019050610270565b50505050905090810190601f1680156102b85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61039f600480360360408110156102dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561031957600080fd5b82018360208201111561032b57600080fd5b8035906020019184600183028401116401000000008311171561034d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061077c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103d3610861565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104135780820151818401526020810190506103f8565b50505050905090810190601f1680156104405780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105516004803603608081101561046457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104a157600080fd5b8201836020820111156104b357600080fd5b803590602001918460018302840111640100000000831117156104d557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061088c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600061058a848484610a3b565b90506000835111156105b25760008060008551602087016000865af114156105b157600080fd5b5b7f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e2358185604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a19392505050565b60006106758585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505084610a3b565b905080604051602001808273ffffffffffffffffffffffffffffffffffffffff1660601b81526014019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156107165780820151818401526020810190506106fb565b50505050905090810190601f1680156107435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60606040518060200161076390610bde565b6020820181038252601f19601f82011660405250905090565b60008260405161078b90610bde565b808273ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f0801580156107c7573d6000803e3d6000fd5b5090506000825111156107f05760008060008451602086016000865af114156107ef57600080fd5b5b7f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e2358184604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a192915050565b60606040518060200161087390610beb565b6020820181038252601f19601f82011660405250905090565b6000808383604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012060001c90506108e786868361057d565b9150600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a32578273ffffffffffffffffffffffffffffffffffffffff16631e52b518838888886040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156109ca5780820151818401526020810190506109af565b50505050905090810190601f1680156109f75780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610a1957600080fd5b505af1158015610a2d573d6000803e3d6000fd5b505050505b50949350505050565b6000808380519060200120836040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050600060405180602001610a8890610bde565b6020820181038252601f19601f820116604052508673ffffffffffffffffffffffffffffffffffffffff166040516020018083805190602001908083835b60208310610ae95780518252602082019150602081019050602083039250610ac6565b6001836020036101000a038019825116818451168082178552505050505050905001828152602001925050506040516020818303038152906040529050818151826020016000f59250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f437265617465322063616c6c206661696c65640000000000000000000000000081525060200191505060405180910390fd5b50509392505050565b6101e680610bf883390190565b60ab80610dde8339019056fe608060405234801561001057600080fd5b506040516101e63803806101e68339818101604052602081101561003357600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806101c46022913960400191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060ab806101196000396000f3fe608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003514156050578060005260206000f35b3660008037600080366000845af43d6000803e60008114156070573d6000fd5b3d6000f3fea2646970667358221220d1429297349653a4918076d650332de1a1068c5f3e07c5c82360c277770b955264736f6c63430007060033496e76616c69642073696e676c65746f6e20616464726573732070726f7669646564608060405273ffffffffffffffffffffffffffffffffffffffff600054167fa619486e0000000000000000000000000000000000000000000000000000000060003514156050578060005260206000f35b3660008037600080366000845af43d6000803e60008114156070573d6000fd5b3d6000f3fea2646970667358221220d1429297349653a4918076d650332de1a1068c5f3e07c5c82360c277770b955264736f6c63430007060033a26469706673582212200c75fe2196b9f752c82794253f2ebce0d821afef5997e1d5a35ec316ce592f6664736f6c63430007060033"
-}
\ No newline at end of file
+ ]
+}
diff --git a/contracts/artifacts/HoneyswapRouter.json b/contracts/artifacts/HoneyswapRouter.json
new file mode 100644
index 0000000000..c95b7fd70d
--- /dev/null
+++ b/contracts/artifacts/HoneyswapRouter.json
@@ -0,0 +1,957 @@
+{
+ "abi": [
+ {
+ "inputs": [],
+ "name": "WETH",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountADesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBDesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "addLiquidity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "factory",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveB",
+ "type": "uint256"
+ }
+ ],
+ "name": "quote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenDesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "addLiquidityETH",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveOut",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAmountIn",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveOut",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAmountOut",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ }
+ ],
+ "name": "getAmountsIn",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ }
+ ],
+ "name": "getAmountsOut",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidityETH",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidityETHSupportingFeeOnTransferTokens",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityETHWithPermit",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityWithPermit",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapETHForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactETHForTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactETHForTokensSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForETH",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForETHSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactETH",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ]
+}
diff --git a/crates/contracts/artifacts/HooksTrampoline.json b/contracts/artifacts/HooksTrampoline.json
similarity index 100%
rename from crates/contracts/artifacts/HooksTrampoline.json
rename to contracts/artifacts/HooksTrampoline.json
diff --git a/crates/contracts/artifacts/ICowWrapper.json b/contracts/artifacts/ICowWrapper.json
similarity index 96%
rename from crates/contracts/artifacts/ICowWrapper.json
rename to contracts/artifacts/ICowWrapper.json
index 4a5d36a0a5..845d9ced8b 100644
--- a/crates/contracts/artifacts/ICowWrapper.json
+++ b/contracts/artifacts/ICowWrapper.json
@@ -2,40 +2,42 @@
"abi": [
{
"type": "function",
- "name": "parseWrapperData",
+ "name": "wrappedSettle",
"inputs": [
{
- "name": "wrapperData",
+ "name": "settleData",
"type": "bytes",
"internalType": "bytes"
- }
- ],
- "outputs": [
+ },
{
- "name": "remainingWrapperData",
+ "name": "wrapperData",
"type": "bytes",
"internalType": "bytes"
}
],
- "stateMutability": "view"
- },
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ }
+ ],
+ "_disabled": [
{
"type": "function",
- "name": "wrappedSettle",
+ "name": "parseWrapperData",
"inputs": [
{
- "name": "settleData",
+ "name": "wrapperData",
"type": "bytes",
"internalType": "bytes"
- },
+ }
+ ],
+ "outputs": [
{
- "name": "wrapperData",
+ "name": "remainingWrapperData",
"type": "bytes",
"internalType": "bytes"
}
],
- "outputs": [],
- "stateMutability": "nonpayable"
+ "stateMutability": "view"
}
]
}
diff --git a/contracts/artifacts/IERC4626.json b/contracts/artifacts/IERC4626.json
new file mode 100644
index 0000000000..2d0eac6929
--- /dev/null
+++ b/contracts/artifacts/IERC4626.json
@@ -0,0 +1,36 @@
+{
+ "abi": [
+ {
+ "type": "function",
+ "name": "asset",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "assetTokenAddress",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "convertToAssets",
+ "inputs": [
+ {
+ "name": "shares",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "assets",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ }
+ ]
+}
diff --git a/crates/contracts/artifacts/ISwaprPair.json b/contracts/artifacts/ISwaprPair.json
similarity index 99%
rename from crates/contracts/artifacts/ISwaprPair.json
rename to contracts/artifacts/ISwaprPair.json
index 94a182ea4b..c14f3336a0 100644
--- a/crates/contracts/artifacts/ISwaprPair.json
+++ b/contracts/artifacts/ISwaprPair.json
@@ -183,36 +183,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "constant": true,
- "inputs": [],
- "name": "MINIMUM_LIQUIDITY",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "pure",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "PERMIT_TYPEHASH",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "payable": false,
- "stateMutability": "pure",
- "type": "function"
- },
{
"constant": true,
"inputs": [
@@ -387,21 +357,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "constant": true,
- "inputs": [],
- "name": "kLast",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
{
"constant": false,
"inputs": [
@@ -504,66 +459,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "constant": true,
- "inputs": [],
- "name": "price0CumulativeLast",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "price1CumulativeLast",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "uint32",
- "name": "",
- "type": "uint32"
- }
- ],
- "name": "setSwapFee",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "address",
- "name": "to",
- "type": "address"
- }
- ],
- "name": "skim",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"constant": false,
"inputs": [
@@ -663,21 +558,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "constant": true,
- "inputs": [],
- "name": "totalSupply",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
{
"constant": false,
"inputs": [
@@ -735,5 +615,127 @@
"stateMutability": "nonpayable",
"type": "function"
}
+ ],
+ "_disabled": [
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "MINIMUM_LIQUIDITY",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "PERMIT_TYPEHASH",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "kLast",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "price0CumulativeLast",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "price1CumulativeLast",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "internalType": "uint32",
+ "name": "",
+ "type": "uint32"
+ }
+ ],
+ "name": "setSwapFee",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ }
+ ],
+ "name": "skim",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }
]
-}
\ No newline at end of file
+}
diff --git a/crates/contracts/artifacts/IUniswapLikePair.json b/contracts/artifacts/IUniswapLikePair.json
similarity index 99%
rename from crates/contracts/artifacts/IUniswapLikePair.json
rename to contracts/artifacts/IUniswapLikePair.json
index cf71166b47..d4ddb0a82a 100644
--- a/crates/contracts/artifacts/IUniswapLikePair.json
+++ b/contracts/artifacts/IUniswapLikePair.json
@@ -181,32 +181,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [],
- "name": "MINIMUM_LIQUIDITY",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "pure",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "PERMIT_TYPEHASH",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "pure",
- "type": "function"
- },
{
"inputs": [
{
@@ -365,19 +339,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [],
- "name": "kLast",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -472,45 +433,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [],
- "name": "price0CumulativeLast",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "price1CumulativeLast",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "to",
- "type": "address"
- }
- ],
- "name": "skim",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -585,19 +507,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [],
- "name": "totalSupply",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -651,5 +560,98 @@
"stateMutability": "nonpayable",
"type": "function"
}
+ ],
+ "_disabled": [
+ {
+ "inputs": [],
+ "name": "MINIMUM_LIQUIDITY",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "PERMIT_TYPEHASH",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "kLast",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "price0CumulativeLast",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "price1CumulativeLast",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ }
+ ],
+ "name": "skim",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
]
-}
\ No newline at end of file
+}
diff --git a/crates/contracts/artifacts/IUniswapLikeRouter.json b/contracts/artifacts/IUniswapLikeRouter.json
similarity index 99%
rename from crates/contracts/artifacts/IUniswapLikeRouter.json
rename to contracts/artifacts/IUniswapLikeRouter.json
index 1ee16c02cc..c95b7fd70d 100644
--- a/crates/contracts/artifacts/IUniswapLikeRouter.json
+++ b/contracts/artifacts/IUniswapLikeRouter.json
@@ -77,6 +77,89 @@
"stateMutability": "nonpayable",
"type": "function"
},
+ {
+ "inputs": [],
+ "name": "factory",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveB",
+ "type": "uint256"
+ }
+ ],
+ "name": "quote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
{
"inputs": [
{
@@ -131,19 +214,6 @@
"stateMutability": "payable",
"type": "function"
},
- {
- "inputs": [],
- "name": "factory",
- "outputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "pure",
- "type": "function"
- },
{
"inputs": [
{
@@ -250,35 +320,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "amountA",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "reserveA",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "reserveB",
- "type": "uint256"
- }
- ],
- "name": "quote",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "amountB",
- "type": "uint256"
- }
- ],
- "stateMutability": "pure",
- "type": "function"
- },
{
"inputs": [
{
@@ -911,45 +952,6 @@
],
"stateMutability": "nonpayable",
"type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "amountOut",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "amountInMax",
- "type": "uint256"
- },
- {
- "internalType": "address[]",
- "name": "path",
- "type": "address[]"
- },
- {
- "internalType": "address",
- "name": "to",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "deadline",
- "type": "uint256"
- }
- ],
- "name": "swapTokensForExactTokens",
- "outputs": [
- {
- "internalType": "uint256[]",
- "name": "amounts",
- "type": "uint256[]"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
}
]
-}
\ No newline at end of file
+}
diff --git a/crates/contracts/artifacts/IUniswapV3Factory.json b/contracts/artifacts/IUniswapV3Factory.json
similarity index 99%
rename from crates/contracts/artifacts/IUniswapV3Factory.json
rename to contracts/artifacts/IUniswapV3Factory.json
index c712812f49..077e501648 100644
--- a/crates/contracts/artifacts/IUniswapV3Factory.json
+++ b/contracts/artifacts/IUniswapV3Factory.json
@@ -93,7 +93,7 @@
"type": "uint24"
}
],
- "name": "createPool",
+ "name": "getPool",
"outputs": [
{
"internalType": "address",
@@ -101,46 +101,24 @@
"type": "address"
}
],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint24",
- "name": "fee",
- "type": "uint24"
- },
- {
- "internalType": "int24",
- "name": "tickSpacing",
- "type": "int24"
- }
- ],
- "name": "enableFeeAmount",
- "outputs": [],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "uint24",
- "name": "fee",
- "type": "uint24"
- }
- ],
- "name": "feeAmountTickSpacing",
+ "inputs": [],
+ "name": "owner",
"outputs": [
{
- "internalType": "int24",
+ "internalType": "address",
"name": "",
- "type": "int24"
+ "type": "address"
}
],
"stateMutability": "view",
"type": "function"
- },
+ }
+ ],
+ "_disabled": [
{
"inputs": [
{
@@ -159,7 +137,7 @@
"type": "uint24"
}
],
- "name": "getPool",
+ "name": "createPool",
"outputs": [
{
"internalType": "address",
@@ -167,17 +145,41 @@
"type": "address"
}
],
- "stateMutability": "view",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
- "inputs": [],
- "name": "owner",
+ "inputs": [
+ {
+ "internalType": "uint24",
+ "name": "fee",
+ "type": "uint24"
+ },
+ {
+ "internalType": "int24",
+ "name": "tickSpacing",
+ "type": "int24"
+ }
+ ],
+ "name": "enableFeeAmount",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint24",
+ "name": "fee",
+ "type": "uint24"
+ }
+ ],
+ "name": "feeAmountTickSpacing",
"outputs": [
{
- "internalType": "address",
+ "internalType": "int24",
"name": "",
- "type": "address"
+ "type": "int24"
}
],
"stateMutability": "view",
@@ -197,4 +199,4 @@
"type": "function"
}
]
-}
\ No newline at end of file
+}
diff --git a/crates/contracts/artifacts/IZeroex.json b/contracts/artifacts/IZeroex.json
similarity index 99%
rename from crates/contracts/artifacts/IZeroex.json
rename to contracts/artifacts/IZeroex.json
index e195fa8a85..bb6f9e0225 100644
--- a/crates/contracts/artifacts/IZeroex.json
+++ b/contracts/artifacts/IZeroex.json
@@ -890,6 +890,24 @@
"name": "TransformerDeployerUpdated",
"type": "event"
},
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4"
+ },
+ {
+ "internalType": "address",
+ "name": "impl",
+ "type": "address"
+ }
+ ],
+ "name": "extend",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
{
"inputs": [
{
@@ -990,25 +1008,10 @@
"internalType": "uint128",
"name": "takerTokenFillAmount",
"type": "uint128"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
}
],
- "name": "_fillLimitOrder",
+ "name": "fillOrKillLimitOrder",
"outputs": [
- {
- "internalType": "uint128",
- "name": "takerTokenFilledAmount",
- "type": "uint128"
- },
{
"internalType": "uint128",
"name": "makerTokenFilledAmount",
@@ -1042,117 +1045,9 @@
"name": "takerAmount",
"type": "uint128"
},
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "txOrigin",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "expiryAndNonce",
- "type": "uint256"
- }
- ],
- "internalType": "struct LibNativeOrder.OtcOrder",
- "name": "order",
- "type": "tuple"
- },
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature",
- "name": "makerSignature",
- "type": "tuple"
- },
- {
- "internalType": "uint128",
- "name": "takerTokenFillAmount",
- "type": "uint128"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "bool",
- "name": "useSelfBalance",
- "type": "bool"
- },
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- }
- ],
- "name": "_fillOtcOrder",
- "outputs": [
- {
- "internalType": "uint128",
- "name": "takerTokenFilledAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "makerTokenFilledAmount",
- "type": "uint128"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
- "type": "address"
- },
- {
- "internalType": "uint128",
- "name": "makerAmount",
- "type": "uint128"
- },
{
"internalType": "uint128",
- "name": "takerAmount",
+ "name": "takerTokenFeeAmount",
"type": "uint128"
},
{
@@ -1167,7 +1062,12 @@
},
{
"internalType": "address",
- "name": "txOrigin",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "feeRecipient",
"type": "address"
},
{
@@ -1186,7 +1086,7 @@
"type": "uint256"
}
],
- "internalType": "struct LibNativeOrder.RfqOrder",
+ "internalType": "struct LibNativeOrder.LimitOrder",
"name": "order",
"type": "tuple"
},
@@ -1216,1778 +1116,1112 @@
"internalType": "struct LibSignature.Signature",
"name": "signature",
"type": "tuple"
- },
- {
- "internalType": "uint128",
- "name": "takerTokenFillAmount",
- "type": "uint128"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "bool",
- "name": "useSelfBalance",
- "type": "bool"
- },
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
}
],
- "name": "_fillRfqOrder",
+ "name": "getLimitOrderRelevantState",
"outputs": [
{
- "internalType": "uint128",
- "name": "takerTokenFilledAmount",
- "type": "uint128"
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "orderHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "enum LibNativeOrder.OrderStatus",
+ "name": "status",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
+ }
+ ],
+ "internalType": "struct LibNativeOrder.OrderInfo",
+ "name": "orderInfo",
+ "type": "tuple"
},
{
"internalType": "uint128",
- "name": "makerTokenFilledAmount",
+ "name": "actualFillableTakerTokenAmount",
"type": "uint128"
+ },
+ {
+ "internalType": "bool",
+ "name": "isSignatureValid",
+ "type": "bool"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "bytes",
- "name": "encodedPath",
- "type": "bytes"
- },
- {
- "internalType": "uint256",
- "name": "sellAmount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "minBuyAmount",
- "type": "uint256"
- },
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
{
"internalType": "address",
- "name": "recipient",
+ "name": "ownerAddress",
"type": "address"
}
],
- "name": "_sellHeldTokenForTokenToUniswapV3",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "buyAmount",
- "type": "uint256"
- }
- ],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "address payable",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "inputToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "outputToken",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "inputTokenAmount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "minOutputTokenAmount",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "uint32",
- "name": "deploymentNonce",
- "type": "uint32"
- },
- {
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
- }
- ],
- "internalType": "struct ITransformERC20Feature.Transformation[]",
- "name": "transformations",
- "type": "tuple[]"
- },
- {
- "internalType": "bool",
- "name": "useSelfBalance",
- "type": "bool"
- },
- {
- "internalType": "address payable",
- "name": "recipient",
- "type": "address"
- }
- ],
- "internalType": "struct ITransformERC20Feature.TransformERC20Args",
- "name": "args",
- "type": "tuple"
- }
- ],
- "name": "_transformERC20",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "outputTokenAmount",
- "type": "uint256"
+ }
+ ],
+ "devdoc": {
+ "details": "Interface for a fully featured Exchange Proxy.",
+ "kind": "dev",
+ "methods": {
+ "_fillLimitOrder((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128,address,address)": {
+ "details": "Fill a limit order. Internal variant. ETH protocol fees can be attached to this call. Any unspent ETH will be refunded to `msg.sender` (not `sender`).",
+ "params": {
+ "order": "The limit order.",
+ "sender": "The order sender.",
+ "signature": "The order signature.",
+ "taker": "The order taker.",
+ "takerTokenFillAmount": "Maximum taker token to fill this order with."
+ },
+ "returns": {
+ "makerTokenFilledAmount": "How much maker token was filled.",
+ "takerTokenFilledAmount": "How much maker token was filled."
}
- ],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
- "type": "uint8"
- },
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "expiry",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "erc20TokenAmount",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
- },
- {
- "internalType": "contract IERC1155Token",
- "name": "erc1155Token",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "erc1155TokenId",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc1155TokenProperties",
- "type": "tuple[]"
- },
- {
- "internalType": "uint128",
- "name": "erc1155TokenAmount",
- "type": "uint128"
- }
- ],
- "internalType": "struct LibNFTOrder.ERC1155Order[]",
- "name": "sellOrders",
- "type": "tuple[]"
+ },
+ "_fillOtcOrder((address,address,uint128,uint128,address,address,address,uint256),(uint8,uint8,bytes32,bytes32),uint128,address,bool,address)": {
+ "details": "Fill an OTC order for up to `takerTokenFillAmount` taker tokens. Internal variant.",
+ "params": {
+ "makerSignature": "The order signature from the maker.",
+ "order": "The OTC order.",
+ "recipient": "The recipient of the bought maker tokens.",
+ "taker": "The address to fill the order in the context of.",
+ "takerTokenFillAmount": "Maximum taker token amount to fill this order with.",
+ "useSelfBalance": "Whether to use the Exchange Proxy's balance of input tokens."
},
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature[]",
- "name": "signatures",
- "type": "tuple[]"
+ "returns": {
+ "makerTokenFilledAmount": "How much maker token was filled.",
+ "takerTokenFilledAmount": "How much taker token was filled."
+ }
+ },
+ "_fillRfqOrder((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128,address,bool,address)": {
+ "details": "Fill an RFQ order. Internal variant.",
+ "params": {
+ "order": "The RFQ order.",
+ "recipient": "The recipient of the maker tokens.",
+ "signature": "The order signature.",
+ "taker": "The order taker.",
+ "takerTokenFillAmount": "Maximum taker token to fill this order with.",
+ "useSelfBalance": "Whether to use the ExchangeProxy's transient balance of taker tokens to fill the order."
},
- {
- "internalType": "uint128[]",
- "name": "erc1155TokenAmounts",
- "type": "uint128[]"
+ "returns": {
+ "makerTokenFilledAmount": "How much maker token was filled.",
+ "takerTokenFilledAmount": "How much maker token was filled."
+ }
+ },
+ "_sellHeldTokenForTokenToUniswapV3(bytes,uint256,uint256,address)": {
+ "details": "Sell a token for another token directly against uniswap v3. Private variant, uses tokens held by `address(this)`.",
+ "params": {
+ "encodedPath": "Uniswap-encoded path.",
+ "minBuyAmount": "Minimum amount of the last token in the path to buy.",
+ "recipient": "The recipient of the bought tokens. Can be zero for sender.",
+ "sellAmount": "amount of the first token in the path to sell."
},
- {
- "internalType": "bytes[]",
- "name": "callbackData",
- "type": "bytes[]"
+ "returns": {
+ "buyAmount": "Amount of the last token in the path bought."
+ }
+ },
+ "_transformERC20((address,address,address,uint256,uint256,(uint32,bytes)[],bool,address))": {
+ "details": "Internal version of `transformERC20()`. Only callable from within.",
+ "params": {
+ "args": "A `TransformERC20Args` struct."
},
- {
- "internalType": "bool",
- "name": "revertIfIncomplete",
- "type": "bool"
+ "returns": {
+ "outputTokenAmount": "The amount of `outputToken` received by the taker."
}
- ],
- "name": "batchBuyERC1155s",
- "outputs": [
- {
- "internalType": "bool[]",
- "name": "successes",
- "type": "bool[]"
- }
- ],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
- "type": "uint8"
- },
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "expiry",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "erc20TokenAmount",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
- },
- {
- "internalType": "contract IERC721Token",
- "name": "erc721Token",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "erc721TokenId",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc721TokenProperties",
- "type": "tuple[]"
- }
- ],
- "internalType": "struct LibNFTOrder.ERC721Order[]",
- "name": "sellOrders",
- "type": "tuple[]"
- },
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature[]",
- "name": "signatures",
- "type": "tuple[]"
+ },
+ "batchBuyERC1155s((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128)[],(uint8,uint8,bytes32,bytes32)[],uint128[],bytes[],bool)": {
+ "details": "Buys multiple ERC1155 assets by filling the given orders.",
+ "params": {
+ "callbackData": "The data (if any) to pass to the taker callback for each order. Refer to the `callbackData` parameter to for `buyERC1155`.",
+ "erc1155TokenAmounts": "The amounts of the ERC1155 assets to buy for each order.",
+ "revertIfIncomplete": "If true, reverts if this function fails to fill any individual order.",
+ "sellOrders": "The ERC1155 sell orders.",
+ "signatures": "The order signatures."
},
- {
- "internalType": "bytes[]",
- "name": "callbackData",
- "type": "bytes[]"
+ "returns": {
+ "successes": "An array of booleans corresponding to whether each order in `orders` was successfully filled."
+ }
+ },
+ "batchBuyERC721s((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[])[],(uint8,uint8,bytes32,bytes32)[],bytes[],bool)": {
+ "details": "Buys multiple ERC721 assets by filling the given orders.",
+ "params": {
+ "callbackData": "The data (if any) to pass to the taker callback for each order. Refer to the `callbackData` parameter to for `buyERC721`.",
+ "revertIfIncomplete": "If true, reverts if this function fails to fill any individual order.",
+ "sellOrders": "The ERC721 sell orders.",
+ "signatures": "The order signatures."
},
- {
- "internalType": "bool",
- "name": "revertIfIncomplete",
- "type": "bool"
+ "returns": {
+ "successes": "An array of booleans corresponding to whether each order in `orders` was successfully filled."
}
- ],
- "name": "batchBuyERC721s",
- "outputs": [
- {
- "internalType": "bool[]",
- "name": "successes",
- "type": "bool[]"
+ },
+ "batchCancelERC1155Orders(uint256[])": {
+ "details": "Cancel multiple ERC1155 orders by their nonces. The caller should be the maker of the orders. Silently succeeds if an order with the same nonce has already been filled or cancelled.",
+ "params": {
+ "orderNonces": "The order nonces."
}
- ],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256[]",
- "name": "orderNonces",
- "type": "uint256[]"
+ },
+ "batchCancelERC721Orders(uint256[])": {
+ "details": "Cancel multiple ERC721 orders by their nonces. The caller should be the maker of the orders. Silently succeeds if an order with the same nonce has already been filled or cancelled.",
+ "params": {
+ "orderNonces": "The order nonces."
}
- ],
- "name": "batchCancelERC1155Orders",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256[]",
- "name": "orderNonces",
- "type": "uint256[]"
+ },
+ "batchCancelLimitOrders((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256)[])": {
+ "details": "Cancel multiple limit orders. The caller must be the maker or a valid order signer. Silently succeeds if the order has already been cancelled.",
+ "params": {
+ "orders": "The limit orders."
}
- ],
- "name": "batchCancelERC721Orders",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
- "type": "address"
- },
- {
- "internalType": "uint128",
- "name": "makerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerTokenFeeAmount",
- "type": "uint128"
- },
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "feeRecipient",
- "type": "address"
- },
- {
- "internalType": "bytes32",
- "name": "pool",
- "type": "bytes32"
- },
- {
- "internalType": "uint64",
- "name": "expiry",
- "type": "uint64"
- },
- {
- "internalType": "uint256",
- "name": "salt",
- "type": "uint256"
- }
- ],
- "internalType": "struct LibNativeOrder.LimitOrder[]",
- "name": "orders",
- "type": "tuple[]"
+ },
+ "batchCancelPairLimitOrders(address[],address[],uint256[])": {
+ "details": "Cancel all limit orders for a given maker and pairs with salts less than the values provided. The caller must be the maker. Subsequent calls to this function with the same caller and pair require the new salt to be >= the old salt.",
+ "params": {
+ "makerTokens": "The maker tokens.",
+ "minValidSalts": "The new minimum valid salts.",
+ "takerTokens": "The taker tokens."
}
- ],
- "name": "batchCancelLimitOrders",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "contract IERC20TokenV06[]",
- "name": "makerTokens",
- "type": "address[]"
- },
- {
- "internalType": "contract IERC20TokenV06[]",
- "name": "takerTokens",
- "type": "address[]"
- },
- {
- "internalType": "uint256[]",
- "name": "minValidSalts",
- "type": "uint256[]"
+ },
+ "batchCancelPairLimitOrdersWithSigner(address,address[],address[],uint256[])": {
+ "details": "Cancel all limit orders for a given maker and pairs with salts less than the values provided. The caller must be a signer registered to the maker. Subsequent calls to this function with the same maker and pair require the new salt to be >= the old salt.",
+ "params": {
+ "maker": "The maker for which to cancel.",
+ "makerTokens": "The maker tokens.",
+ "minValidSalts": "The new minimum valid salts.",
+ "takerTokens": "The taker tokens."
}
- ],
- "name": "batchCancelPairLimitOrders",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06[]",
- "name": "makerTokens",
- "type": "address[]"
+ },
+ "batchCancelPairRfqOrders(address[],address[],uint256[])": {
+ "details": "Cancel all RFQ orders for a given maker and pairs with salts less than the values provided. The caller must be the maker. Subsequent calls to this function with the same caller and pair require the new salt to be >= the old salt.",
+ "params": {
+ "makerTokens": "The maker tokens.",
+ "minValidSalts": "The new minimum valid salts.",
+ "takerTokens": "The taker tokens."
+ }
+ },
+ "batchCancelPairRfqOrdersWithSigner(address,address[],address[],uint256[])": {
+ "details": "Cancel all RFQ orders for a given maker and pairs with salts less than the values provided. The caller must be a signer registered to the maker. Subsequent calls to this function with the same maker and pair require the new salt to be >= the old salt.",
+ "params": {
+ "maker": "The maker for which to cancel.",
+ "makerTokens": "The maker tokens.",
+ "minValidSalts": "The new minimum valid salts.",
+ "takerTokens": "The taker tokens."
+ }
+ },
+ "batchCancelRfqOrders((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256)[])": {
+ "details": "Cancel multiple RFQ orders. The caller must be the maker or a valid order signer. Silently succeeds if the order has already been cancelled.",
+ "params": {
+ "orders": "The RFQ orders."
+ }
+ },
+ "batchExecuteMetaTransactions((address,address,uint256,uint256,uint256,uint256,bytes,uint256,address,uint256)[],(uint8,uint8,bytes32,bytes32)[])": {
+ "details": "Execute multiple meta-transactions.",
+ "params": {
+ "mtxs": "The meta-transactions.",
+ "signatures": "The signature by each respective `mtx.signer`."
},
- {
- "internalType": "contract IERC20TokenV06[]",
- "name": "takerTokens",
- "type": "address[]"
+ "returns": {
+ "returnResults": "The ABI-encoded results of the underlying calls."
+ }
+ },
+ "batchFillLimitOrders((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256)[],(uint8,uint8,bytes32,bytes32)[],uint128[],bool)": {
+ "details": "Fills multiple limit orders.",
+ "params": {
+ "orders": "Array of limit orders.",
+ "revertIfIncomplete": "If true, reverts if this function fails to fill the full fill amount for any individual order.",
+ "signatures": "Array of signatures corresponding to each order.",
+ "takerTokenFillAmounts": "Array of desired amounts to fill each order."
},
- {
- "internalType": "uint256[]",
- "name": "minValidSalts",
- "type": "uint256[]"
+ "returns": {
+ "makerTokenFilledAmounts": "Array of amounts filled, in maker token.",
+ "takerTokenFilledAmounts": "Array of amounts filled, in taker token."
}
- ],
- "name": "batchCancelPairLimitOrdersWithSigner",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "contract IERC20TokenV06[]",
- "name": "makerTokens",
- "type": "address[]"
+ },
+ "batchFillRfqOrders((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256)[],(uint8,uint8,bytes32,bytes32)[],uint128[],bool)": {
+ "details": "Fills multiple RFQ orders.",
+ "params": {
+ "orders": "Array of RFQ orders.",
+ "revertIfIncomplete": "If true, reverts if this function fails to fill the full fill amount for any individual order.",
+ "signatures": "Array of signatures corresponding to each order.",
+ "takerTokenFillAmounts": "Array of desired amounts to fill each order."
},
- {
- "internalType": "contract IERC20TokenV06[]",
- "name": "takerTokens",
- "type": "address[]"
+ "returns": {
+ "makerTokenFilledAmounts": "Array of amounts filled, in maker token.",
+ "takerTokenFilledAmounts": "Array of amounts filled, in taker token."
+ }
+ },
+ "batchFillTakerSignedOtcOrders((address,address,uint128,uint128,address,address,address,uint256)[],(uint8,uint8,bytes32,bytes32)[],(uint8,uint8,bytes32,bytes32)[],bool[])": {
+ "details": "Fills multiple taker-signed OTC orders.",
+ "params": {
+ "makerSignatures": "Array of maker signatures for each order.",
+ "orders": "Array of OTC orders.",
+ "takerSignatures": "Array of taker signatures for each order.",
+ "unwrapWeth": "Array of booleans representing whether or not to unwrap bought WETH into ETH for each order. Should be set to false if the maker token is not WETH."
},
- {
- "internalType": "uint256[]",
- "name": "minValidSalts",
- "type": "uint256[]"
+ "returns": {
+ "successes": "Array of booleans representing whether or not each order in `orders` was filled successfully."
}
- ],
- "name": "batchCancelPairRfqOrders",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
+ },
+ "batchGetLimitOrderRelevantStates((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256)[],(uint8,uint8,bytes32,bytes32)[])": {
+ "details": "Batch version of `getLimitOrderRelevantState()`, without reverting. Orders that would normally cause `getLimitOrderRelevantState()` to revert will have empty results.",
+ "params": {
+ "orders": "The limit orders.",
+ "signatures": "The order signatures."
},
- {
- "internalType": "contract IERC20TokenV06[]",
- "name": "makerTokens",
- "type": "address[]"
+ "returns": {
+ "actualFillableTakerTokenAmounts": "How much of each order is fillable based on maker funds, in taker tokens.",
+ "isSignatureValids": "Whether each signature is valid for the order.",
+ "orderInfos": "Info about the orders."
+ }
+ },
+ "batchGetRfqOrderRelevantStates((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256)[],(uint8,uint8,bytes32,bytes32)[])": {
+ "details": "Batch version of `getRfqOrderRelevantState()`, without reverting. Orders that would normally cause `getRfqOrderRelevantState()` to revert will have empty results.",
+ "params": {
+ "orders": "The RFQ orders.",
+ "signatures": "The order signatures."
},
- {
- "internalType": "contract IERC20TokenV06[]",
- "name": "takerTokens",
- "type": "address[]"
+ "returns": {
+ "actualFillableTakerTokenAmounts": "How much of each order is fillable based on maker funds, in taker tokens.",
+ "isSignatureValids": "Whether each signature is valid for the order.",
+ "orderInfos": "Info about the orders."
+ }
+ },
+ "batchMatchERC721Orders((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[])[],(uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[])[],(uint8,uint8,bytes32,bytes32)[],(uint8,uint8,bytes32,bytes32)[])": {
+ "details": "Matches pairs of complementary orders that have non-negative spreads. Each order is filled at their respective price, and the matcher receives a profit denominated in the ERC20 token.",
+ "params": {
+ "buyOrderSignatures": "Signatures for the buy orders.",
+ "buyOrders": "Orders buying ERC721 assets.",
+ "sellOrderSignatures": "Signatures for the sell orders.",
+ "sellOrders": "Orders selling ERC721 assets."
},
- {
- "internalType": "uint256[]",
- "name": "minValidSalts",
- "type": "uint256[]"
+ "returns": {
+ "profits": "The amount of profit earned by the caller of this function for each pair of matched orders (denominated in the ERC20 token of the order pair).",
+ "successes": "An array of booleans corresponding to whether each pair of orders was successfully matched."
}
- ],
- "name": "batchCancelPairRfqOrdersWithSigner",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
- "type": "address"
- },
- {
- "internalType": "uint128",
- "name": "makerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerAmount",
- "type": "uint128"
- },
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "txOrigin",
- "type": "address"
- },
- {
- "internalType": "bytes32",
- "name": "pool",
- "type": "bytes32"
- },
- {
- "internalType": "uint64",
- "name": "expiry",
- "type": "uint64"
- },
- {
- "internalType": "uint256",
- "name": "salt",
- "type": "uint256"
- }
- ],
- "internalType": "struct LibNativeOrder.RfqOrder[]",
- "name": "orders",
- "type": "tuple[]"
+ },
+ "buyERC1155((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128),(uint8,uint8,bytes32,bytes32),uint128,bytes)": {
+ "details": "Buys an ERC1155 asset by filling the given order.",
+ "params": {
+ "callbackData": "If this parameter is non-zero, invokes `zeroExERC1155OrderCallback` on `msg.sender` after the ERC1155 asset has been transferred to `msg.sender` but before transferring the ERC20 tokens to the seller. Native tokens acquired during the callback can be used to fill the order.",
+ "erc1155BuyAmount": "The amount of the ERC1155 asset to buy.",
+ "sellOrder": "The ERC1155 sell order.",
+ "signature": "The order signature."
}
- ],
- "name": "batchCancelRfqOrders",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "address payable",
- "name": "signer",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "minGasPrice",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "maxGasPrice",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "expirationTimeSeconds",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "salt",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "callData",
- "type": "bytes"
- },
- {
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "feeToken",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "feeAmount",
- "type": "uint256"
- }
- ],
- "internalType": "struct IMetaTransactionsFeature.MetaTransactionData[]",
- "name": "mtxs",
- "type": "tuple[]"
+ },
+ "buyERC721((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]),(uint8,uint8,bytes32,bytes32),bytes)": {
+ "details": "Buys an ERC721 asset by filling the given order.",
+ "params": {
+ "callbackData": "If this parameter is non-zero, invokes `zeroExERC721OrderCallback` on `msg.sender` after the ERC721 asset has been transferred to `msg.sender` but before transferring the ERC20 tokens to the seller. Native tokens acquired during the callback can be used to fill the order.",
+ "sellOrder": "The ERC721 sell order.",
+ "signature": "The order signature."
+ }
+ },
+ "cancelERC1155Order(uint256)": {
+ "details": "Cancel a single ERC1155 order by its nonce. The caller should be the maker of the order. Silently succeeds if an order with the same nonce has already been filled or cancelled.",
+ "params": {
+ "orderNonce": "The order nonce."
+ }
+ },
+ "cancelERC721Order(uint256)": {
+ "details": "Cancel a single ERC721 order by its nonce. The caller should be the maker of the order. Silently succeeds if an order with the same nonce has already been filled or cancelled.",
+ "params": {
+ "orderNonce": "The order nonce."
+ }
+ },
+ "cancelLimitOrder((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256))": {
+ "details": "Cancel a single limit order. The caller must be the maker or a valid order signer. Silently succeeds if the order has already been cancelled.",
+ "params": {
+ "order": "The limit order."
+ }
+ },
+ "cancelPairLimitOrders(address,address,uint256)": {
+ "details": "Cancel all limit orders for a given maker and pair with a salt less than the value provided. The caller must be the maker. Subsequent calls to this function with the same caller and pair require the new salt to be >= the old salt.",
+ "params": {
+ "makerToken": "The maker token.",
+ "minValidSalt": "The new minimum valid salt.",
+ "takerToken": "The taker token."
+ }
+ },
+ "cancelPairLimitOrdersWithSigner(address,address,address,uint256)": {
+ "details": "Cancel all limit orders for a given maker and pair with a salt less than the value provided. The caller must be a signer registered to the maker. Subsequent calls to this function with the same maker and pair require the new salt to be >= the old salt.",
+ "params": {
+ "maker": "The maker for which to cancel.",
+ "makerToken": "The maker token.",
+ "minValidSalt": "The new minimum valid salt.",
+ "takerToken": "The taker token."
+ }
+ },
+ "cancelPairRfqOrders(address,address,uint256)": {
+ "details": "Cancel all RFQ orders for a given maker and pair with a salt less than the value provided. The caller must be the maker. Subsequent calls to this function with the same caller and pair require the new salt to be >= the old salt.",
+ "params": {
+ "makerToken": "The maker token.",
+ "minValidSalt": "The new minimum valid salt.",
+ "takerToken": "The taker token."
+ }
+ },
+ "cancelPairRfqOrdersWithSigner(address,address,address,uint256)": {
+ "details": "Cancel all RFQ orders for a given maker and pair with a salt less than the value provided. The caller must be a signer registered to the maker. Subsequent calls to this function with the same maker and pair require the new salt to be >= the old salt.",
+ "params": {
+ "maker": "The maker for which to cancel.",
+ "makerToken": "The maker token.",
+ "minValidSalt": "The new minimum valid salt.",
+ "takerToken": "The taker token."
+ }
+ },
+ "cancelRfqOrder((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256))": {
+ "details": "Cancel a single RFQ order. The caller must be the maker or a valid order signer. Silently succeeds if the order has already been cancelled.",
+ "params": {
+ "order": "The RFQ order."
+ }
+ },
+ "createTransformWallet()": {
+ "details": "Deploy a new flash wallet instance and replace the current one with it. Useful if we somehow break the current wallet instance. Only callable by the owner.",
+ "returns": {
+ "wallet": "The new wallet instance."
+ }
+ },
+ "executeMetaTransaction((address,address,uint256,uint256,uint256,uint256,bytes,uint256,address,uint256),(uint8,uint8,bytes32,bytes32))": {
+ "details": "Execute a single meta-transaction.",
+ "params": {
+ "mtx": "The meta-transaction.",
+ "signature": "The signature by `mtx.signer`."
},
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature[]",
- "name": "signatures",
- "type": "tuple[]"
+ "returns": {
+ "returnResult": "The ABI-encoded result of the underlying call."
}
- ],
- "name": "batchExecuteMetaTransactions",
- "outputs": [
- {
- "internalType": "bytes[]",
- "name": "returnResults",
- "type": "bytes[]"
+ },
+ "extend(bytes4,address)": {
+ "details": "Register or replace a function.",
+ "params": {
+ "impl": "The implementation contract for the function.",
+ "selector": "The function selector."
}
- ],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
- "type": "address"
- },
- {
- "internalType": "uint128",
- "name": "makerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerTokenFeeAmount",
- "type": "uint128"
- },
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "feeRecipient",
- "type": "address"
- },
- {
- "internalType": "bytes32",
- "name": "pool",
- "type": "bytes32"
- },
- {
- "internalType": "uint64",
- "name": "expiry",
- "type": "uint64"
- },
- {
- "internalType": "uint256",
- "name": "salt",
- "type": "uint256"
- }
- ],
- "internalType": "struct LibNativeOrder.LimitOrder[]",
- "name": "orders",
- "type": "tuple[]"
- },
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature[]",
- "name": "signatures",
- "type": "tuple[]"
- },
- {
- "internalType": "uint128[]",
- "name": "takerTokenFillAmounts",
- "type": "uint128[]"
+ },
+ "fillLimitOrder((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": {
+ "details": "Fill a limit order. The taker and sender will be the caller.",
+ "params": {
+ "order": "The limit order. ETH protocol fees can be attached to this call. Any unspent ETH will be refunded to the caller.",
+ "signature": "The order signature.",
+ "takerTokenFillAmount": "Maximum taker token amount to fill this order with."
},
- {
- "internalType": "bool",
- "name": "revertIfIncomplete",
- "type": "bool"
+ "returns": {
+ "makerTokenFilledAmount": "How much maker token was filled.",
+ "takerTokenFilledAmount": "How much maker token was filled."
}
- ],
- "name": "batchFillLimitOrders",
- "outputs": [
- {
- "internalType": "uint128[]",
- "name": "takerTokenFilledAmounts",
- "type": "uint128[]"
+ },
+ "fillOrKillLimitOrder((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": {
+ "details": "Fill an RFQ order for exactly `takerTokenFillAmount` taker tokens. The taker will be the caller. ETH protocol fees can be attached to this call. Any unspent ETH will be refunded to the caller.",
+ "params": {
+ "order": "The limit order.",
+ "signature": "The order signature.",
+ "takerTokenFillAmount": "How much taker token to fill this order with."
},
- {
- "internalType": "uint128[]",
- "name": "makerTokenFilledAmounts",
- "type": "uint128[]"
+ "returns": {
+ "makerTokenFilledAmount": "How much maker token was filled."
}
- ],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
- "type": "address"
- },
- {
- "internalType": "uint128",
- "name": "makerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerAmount",
- "type": "uint128"
- },
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "txOrigin",
- "type": "address"
- },
- {
- "internalType": "bytes32",
- "name": "pool",
- "type": "bytes32"
- },
- {
- "internalType": "uint64",
- "name": "expiry",
- "type": "uint64"
- },
- {
- "internalType": "uint256",
- "name": "salt",
- "type": "uint256"
- }
- ],
- "internalType": "struct LibNativeOrder.RfqOrder[]",
- "name": "orders",
- "type": "tuple[]"
+ },
+ "fillOrKillRfqOrder((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": {
+ "details": "Fill an RFQ order for exactly `takerTokenFillAmount` taker tokens. The taker will be the caller.",
+ "params": {
+ "order": "The RFQ order.",
+ "signature": "The order signature.",
+ "takerTokenFillAmount": "How much taker token to fill this order with."
},
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature[]",
- "name": "signatures",
- "type": "tuple[]"
+ "returns": {
+ "makerTokenFilledAmount": "How much maker token was filled."
+ }
+ },
+ "fillOtcOrder((address,address,uint128,uint128,address,address,address,uint256),(uint8,uint8,bytes32,bytes32),uint128)": {
+ "details": "Fill an OTC order for up to `takerTokenFillAmount` taker tokens.",
+ "params": {
+ "makerSignature": "The order signature from the maker.",
+ "order": "The OTC order.",
+ "takerTokenFillAmount": "Maximum taker token amount to fill this order with."
},
- {
- "internalType": "uint128[]",
- "name": "takerTokenFillAmounts",
- "type": "uint128[]"
+ "returns": {
+ "makerTokenFilledAmount": "How much maker token was filled.",
+ "takerTokenFilledAmount": "How much taker token was filled."
+ }
+ },
+ "fillOtcOrderForEth((address,address,uint128,uint128,address,address,address,uint256),(uint8,uint8,bytes32,bytes32),uint128)": {
+ "details": "Fill an OTC order for up to `takerTokenFillAmount` taker tokens. Unwraps bought WETH into ETH before sending it to the taker.",
+ "params": {
+ "makerSignature": "The order signature from the maker.",
+ "order": "The OTC order.",
+ "takerTokenFillAmount": "Maximum taker token amount to fill this order with."
},
- {
- "internalType": "bool",
- "name": "revertIfIncomplete",
- "type": "bool"
+ "returns": {
+ "makerTokenFilledAmount": "How much maker token was filled.",
+ "takerTokenFilledAmount": "How much taker token was filled."
}
- ],
- "name": "batchFillRfqOrders",
- "outputs": [
- {
- "internalType": "uint128[]",
- "name": "takerTokenFilledAmounts",
- "type": "uint128[]"
+ },
+ "fillOtcOrderWithEth((address,address,uint128,uint128,address,address,address,uint256),(uint8,uint8,bytes32,bytes32))": {
+ "details": "Fill an OTC order whose taker token is WETH for up to `msg.value`.",
+ "params": {
+ "makerSignature": "The order signature from the maker.",
+ "order": "The OTC order."
},
- {
- "internalType": "uint128[]",
- "name": "makerTokenFilledAmounts",
- "type": "uint128[]"
+ "returns": {
+ "makerTokenFilledAmount": "How much maker token was filled.",
+ "takerTokenFilledAmount": "How much taker token was filled."
}
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
- "type": "address"
- },
- {
- "internalType": "uint128",
- "name": "makerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerAmount",
- "type": "uint128"
- },
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "txOrigin",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "expiryAndNonce",
- "type": "uint256"
- }
- ],
- "internalType": "struct LibNativeOrder.OtcOrder[]",
- "name": "orders",
- "type": "tuple[]"
+ },
+ "fillRfqOrder((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": {
+ "details": "Fill an RFQ order for up to `takerTokenFillAmount` taker tokens. The taker will be the caller.",
+ "params": {
+ "order": "The RFQ order.",
+ "signature": "The order signature.",
+ "takerTokenFillAmount": "Maximum taker token amount to fill this order with."
},
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature[]",
- "name": "makerSignatures",
- "type": "tuple[]"
+ "returns": {
+ "makerTokenFilledAmount": "How much maker token was filled.",
+ "takerTokenFilledAmount": "How much maker token was filled."
+ }
+ },
+ "fillTakerSignedOtcOrder((address,address,uint128,uint128,address,address,address,uint256),(uint8,uint8,bytes32,bytes32),(uint8,uint8,bytes32,bytes32))": {
+ "details": "Fully fill an OTC order. \"Meta-transaction\" variant, requires order to be signed by both maker and taker.",
+ "params": {
+ "makerSignature": "The order signature from the maker.",
+ "order": "The OTC order.",
+ "takerSignature": "The order signature from the taker."
+ }
+ },
+ "fillTakerSignedOtcOrderForEth((address,address,uint128,uint128,address,address,address,uint256),(uint8,uint8,bytes32,bytes32),(uint8,uint8,bytes32,bytes32))": {
+ "details": "Fully fill an OTC order. \"Meta-transaction\" variant, requires order to be signed by both maker and taker. Unwraps bought WETH into ETH before sending it to the taker.",
+ "params": {
+ "makerSignature": "The order signature from the maker.",
+ "order": "The OTC order.",
+ "takerSignature": "The order signature from the taker."
+ }
+ },
+ "getERC1155OrderHash((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128))": {
+ "details": "Get the EIP-712 hash of an ERC1155 order.",
+ "params": {
+ "order": "The ERC1155 order."
},
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature[]",
- "name": "takerSignatures",
- "type": "tuple[]"
+ "returns": {
+ "orderHash": "The order hash."
+ }
+ },
+ "getERC1155OrderInfo((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128))": {
+ "details": "Get the order info for an ERC1155 order.",
+ "params": {
+ "order": "The ERC1155 order."
},
- {
- "internalType": "bool[]",
- "name": "unwrapWeth",
- "type": "bool[]"
+ "returns": {
+ "orderInfo": "Infor about the order."
}
- ],
- "name": "batchFillTakerSignedOtcOrders",
- "outputs": [
- {
- "internalType": "bool[]",
- "name": "successes",
- "type": "bool[]"
+ },
+ "getERC721OrderHash((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]))": {
+ "details": "Get the EIP-712 hash of an ERC721 order.",
+ "params": {
+ "order": "The ERC721 order."
+ },
+ "returns": {
+ "orderHash": "The order hash."
}
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
- "type": "address"
- },
- {
- "internalType": "uint128",
- "name": "makerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerTokenFeeAmount",
- "type": "uint128"
- },
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "feeRecipient",
- "type": "address"
- },
- {
- "internalType": "bytes32",
- "name": "pool",
- "type": "bytes32"
- },
- {
- "internalType": "uint64",
- "name": "expiry",
- "type": "uint64"
- },
- {
- "internalType": "uint256",
- "name": "salt",
- "type": "uint256"
- }
- ],
- "internalType": "struct LibNativeOrder.LimitOrder[]",
- "name": "orders",
- "type": "tuple[]"
+ },
+ "getERC721OrderStatus((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]))": {
+ "details": "Get the current status of an ERC721 order.",
+ "params": {
+ "order": "The ERC721 order."
},
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature[]",
- "name": "signatures",
- "type": "tuple[]"
+ "returns": {
+ "status": "The status of the order."
}
- ],
- "name": "batchGetLimitOrderRelevantStates",
- "outputs": [
- {
- "components": [
- {
- "internalType": "bytes32",
- "name": "orderHash",
- "type": "bytes32"
- },
- {
- "internalType": "enum LibNativeOrder.OrderStatus",
- "name": "status",
- "type": "uint8"
- },
- {
- "internalType": "uint128",
- "name": "takerTokenFilledAmount",
- "type": "uint128"
- }
- ],
- "internalType": "struct LibNativeOrder.OrderInfo[]",
- "name": "orderInfos",
- "type": "tuple[]"
+ },
+ "getERC721OrderStatusBitVector(address,uint248)": {
+ "details": "Get the order status bit vector for the given maker address and nonce range.",
+ "params": {
+ "maker": "The maker of the order.",
+ "nonceRange": "Order status bit vectors are indexed by maker address and the upper 248 bits of the order nonce. We define `nonceRange` to be these 248 bits."
},
- {
- "internalType": "uint128[]",
- "name": "actualFillableTakerTokenAmounts",
- "type": "uint128[]"
+ "returns": {
+ "bitVector": "The order status bit vector for the given maker and nonce range."
+ }
+ },
+ "getLimitOrderHash((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256))": {
+ "details": "Get the canonical hash of a limit order.",
+ "params": {
+ "order": "The limit order."
},
- {
- "internalType": "bool[]",
- "name": "isSignatureValids",
- "type": "bool[]"
+ "returns": {
+ "orderHash": "The order hash."
}
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
- "type": "address"
- },
- {
- "internalType": "uint128",
- "name": "makerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerAmount",
- "type": "uint128"
- },
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "txOrigin",
- "type": "address"
- },
- {
- "internalType": "bytes32",
- "name": "pool",
- "type": "bytes32"
- },
- {
- "internalType": "uint64",
- "name": "expiry",
- "type": "uint64"
- },
- {
- "internalType": "uint256",
- "name": "salt",
- "type": "uint256"
- }
- ],
- "internalType": "struct LibNativeOrder.RfqOrder[]",
- "name": "orders",
- "type": "tuple[]"
+ },
+ "getLimitOrderInfo((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256))": {
+ "details": "Get the order info for a limit order.",
+ "params": {
+ "order": "The limit order."
},
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature[]",
- "name": "signatures",
- "type": "tuple[]"
+ "returns": {
+ "orderInfo": "Info about the order."
}
- ],
- "name": "batchGetRfqOrderRelevantStates",
- "outputs": [
- {
- "components": [
- {
- "internalType": "bytes32",
- "name": "orderHash",
- "type": "bytes32"
- },
- {
- "internalType": "enum LibNativeOrder.OrderStatus",
- "name": "status",
- "type": "uint8"
- },
- {
- "internalType": "uint128",
- "name": "takerTokenFilledAmount",
- "type": "uint128"
- }
- ],
- "internalType": "struct LibNativeOrder.OrderInfo[]",
- "name": "orderInfos",
- "type": "tuple[]"
+ },
+ "getLimitOrderRelevantState((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32))": {
+ "details": "Get order info, fillable amount, and signature validity for a limit order. Fillable amount is determined using balances and allowances of the maker.",
+ "params": {
+ "order": "The limit order.",
+ "signature": "The order signature."
},
- {
- "internalType": "uint128[]",
- "name": "actualFillableTakerTokenAmounts",
- "type": "uint128[]"
+ "returns": {
+ "actualFillableTakerTokenAmount": "How much of the order is fillable based on maker funds, in taker tokens.",
+ "isSignatureValid": "Whether the signature is valid.",
+ "orderInfo": "Info about the order."
+ }
+ },
+ "getMetaTransactionExecutedBlock((address,address,uint256,uint256,uint256,uint256,bytes,uint256,address,uint256))": {
+ "details": "Get the block at which a meta-transaction has been executed.",
+ "params": {
+ "mtx": "The meta-transaction."
},
- {
- "internalType": "bool[]",
- "name": "isSignatureValids",
- "type": "bool[]"
+ "returns": {
+ "blockNumber": "The block height when the meta-transactioin was executed."
}
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
- "type": "uint8"
- },
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "expiry",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "erc20TokenAmount",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
- },
- {
- "internalType": "contract IERC721Token",
- "name": "erc721Token",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "erc721TokenId",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc721TokenProperties",
- "type": "tuple[]"
- }
- ],
- "internalType": "struct LibNFTOrder.ERC721Order[]",
- "name": "sellOrders",
- "type": "tuple[]"
+ },
+ "getMetaTransactionHash((address,address,uint256,uint256,uint256,uint256,bytes,uint256,address,uint256))": {
+ "details": "Get the EIP712 hash of a meta-transaction.",
+ "params": {
+ "mtx": "The meta-transaction."
+ },
+ "returns": {
+ "mtxHash": "The EIP712 hash of `mtx`."
+ }
+ },
+ "getMetaTransactionHashExecutedBlock(bytes32)": {
+ "details": "Get the block at which a meta-transaction hash has been executed.",
+ "params": {
+ "mtxHash": "The meta-transaction hash."
+ },
+ "returns": {
+ "blockNumber": "The block height when the meta-transactioin was executed."
+ }
+ },
+ "getOtcOrderHash((address,address,uint128,uint128,address,address,address,uint256))": {
+ "details": "Get the canonical hash of an OTC order.",
+ "params": {
+ "order": "The OTC order."
+ },
+ "returns": {
+ "orderHash": "The order hash."
+ }
+ },
+ "getOtcOrderInfo((address,address,uint128,uint128,address,address,address,uint256))": {
+ "details": "Get the order info for an OTC order.",
+ "params": {
+ "order": "The OTC order."
+ },
+ "returns": {
+ "orderInfo": "Info about the order."
+ }
+ },
+ "getProtocolFeeMultiplier()": {
+ "details": "Get the protocol fee multiplier. This should be multiplied by the gas price to arrive at the required protocol fee to fill a native order.",
+ "returns": {
+ "multiplier": "The protocol fee multiplier."
+ }
+ },
+ "getQuoteSigner()": {
+ "details": "Return the optional signer for `transformERC20()` calldata.",
+ "returns": {
+ "signer": "The transform deployer address."
+ }
+ },
+ "getRfqOrderHash((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256))": {
+ "details": "Get the canonical hash of an RFQ order.",
+ "params": {
+ "order": "The RFQ order."
+ },
+ "returns": {
+ "orderHash": "The order hash."
+ }
+ },
+ "getRfqOrderInfo((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256))": {
+ "details": "Get the order info for an RFQ order.",
+ "params": {
+ "order": "The RFQ order."
+ },
+ "returns": {
+ "orderInfo": "Info about the order."
+ }
+ },
+ "getRfqOrderRelevantState((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32))": {
+ "details": "Get order info, fillable amount, and signature validity for an RFQ order. Fillable amount is determined using balances and allowances of the maker.",
+ "params": {
+ "order": "The RFQ order.",
+ "signature": "The order signature."
+ },
+ "returns": {
+ "actualFillableTakerTokenAmount": "How much of the order is fillable based on maker funds, in taker tokens.",
+ "isSignatureValid": "Whether the signature is valid.",
+ "orderInfo": "Info about the order."
+ }
+ },
+ "getRollbackEntryAtIndex(bytes4,uint256)": {
+ "details": "Retrieve an entry in the rollback history for a function.",
+ "params": {
+ "idx": "The index in the rollback history.",
+ "selector": "The function selector."
+ },
+ "returns": {
+ "impl": "An implementation address for the function at index `idx`."
+ }
+ },
+ "getRollbackLength(bytes4)": {
+ "details": "Retrieve the length of the rollback history for a function.",
+ "params": {
+ "selector": "The function selector."
+ },
+ "returns": {
+ "rollbackLength": "The number of items in the rollback history for the function."
+ }
+ },
+ "getTransformWallet()": {
+ "details": "Return the current wallet instance that will serve as the execution context for transformations.",
+ "returns": {
+ "wallet": "The wallet instance."
+ }
+ },
+ "getTransformerDeployer()": {
+ "details": "Return the allowed deployer for transformers.",
+ "returns": {
+ "deployer": "The transform deployer address."
+ }
+ },
+ "isValidOrderSigner(address,address)": {
+ "details": "checks if a given address is registered to sign on behalf of a maker address",
+ "params": {
+ "maker": "The maker address encoded in an order (can be a contract)",
+ "signer": "The address that is providing a signature"
+ }
+ },
+ "lastOtcTxOriginNonce(address,uint64)": {
+ "details": "Get the last nonce used for a particular tx.origin address and nonce bucket.",
+ "params": {
+ "nonceBucket": "The nonce bucket index.",
+ "txOrigin": "The address."
+ },
+ "returns": {
+ "lastNonce": "The last nonce value used."
+ }
+ },
+ "matchERC721Orders((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]),(uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]),(uint8,uint8,bytes32,bytes32),(uint8,uint8,bytes32,bytes32))": {
+ "details": "Matches a pair of complementary orders that have a non-negative spread. Each order is filled at their respective price, and the matcher receives a profit denominated in the ERC20 token.",
+ "params": {
+ "buyOrder": "Order buying an ERC721 asset.",
+ "buyOrderSignature": "Signature for the buy order.",
+ "sellOrder": "Order selling an ERC721 asset.",
+ "sellOrderSignature": "Signature for the sell order."
+ },
+ "returns": {
+ "profit": "The amount of profit earned by the caller of this function (denominated in the ERC20 token of the matched orders)."
+ }
+ },
+ "migrate(address,bytes,address)": {
+ "details": "Execute a migration function in the context of the ZeroEx contract. The result of the function being called should be the magic bytes 0x2c64c5ef (`keccack('MIGRATE_SUCCESS')`). Only callable by the owner. The owner will be temporarily set to `address(this)` inside the call. Before returning, the owner will be set to `newOwner`.",
+ "params": {
+ "data": "The call data.",
+ "newOwner": "The address of the new owner.",
+ "target": "The migrator contract address."
+ }
+ },
+ "multiplexBatchSellEthForToken(address,(uint8,uint256,bytes)[],uint256)": {
+ "details": "Sells attached ETH for `outputToken` using the provided calls.",
+ "params": {
+ "calls": "The calls to use to sell the attached ETH.",
+ "minBuyAmount": "The minimum amount of `outputToken` that must be bought for this function to not revert.",
+ "outputToken": "The token to buy."
+ },
+ "returns": {
+ "boughtAmount": "The amount of `outputToken` bought."
+ }
+ },
+ "multiplexBatchSellTokenForEth(address,(uint8,uint256,bytes)[],uint256,uint256)": {
+ "details": "Sells `sellAmount` of the given `inputToken` for ETH using the provided calls.",
+ "params": {
+ "calls": "The calls to use to sell the input tokens.",
+ "inputToken": "The token to sell.",
+ "minBuyAmount": "The minimum amount of ETH that must be bought for this function to not revert.",
+ "sellAmount": "The amount of `inputToken` to sell."
+ },
+ "returns": {
+ "boughtAmount": "The amount of ETH bought."
+ }
+ },
+ "multiplexBatchSellTokenForToken(address,address,(uint8,uint256,bytes)[],uint256,uint256)": {
+ "details": "Sells `sellAmount` of the given `inputToken` for `outputToken` using the provided calls.",
+ "params": {
+ "calls": "The calls to use to sell the input tokens.",
+ "inputToken": "The token to sell.",
+ "minBuyAmount": "The minimum amount of `outputToken` that must be bought for this function to not revert.",
+ "outputToken": "The token to buy.",
+ "sellAmount": "The amount of `inputToken` to sell."
+ },
+ "returns": {
+ "boughtAmount": "The amount of `outputToken` bought."
+ }
+ },
+ "multiplexMultiHopSellEthForToken(address[],(uint8,bytes)[],uint256)": {
+ "details": "Sells attached ETH via the given sequence of tokens and calls. `tokens[0]` must be WETH. The last token in `tokens` is the output token that will ultimately be sent to `msg.sender`",
+ "params": {
+ "calls": "The sequence of calls to use for the sell.",
+ "minBuyAmount": "The minimum amount of output tokens that must be bought for this function to not revert.",
+ "tokens": "The sequence of tokens to use for the sell, i.e. `tokens[i]` will be sold for `tokens[i+1]` via `calls[i]`."
+ },
+ "returns": {
+ "boughtAmount": "The amount of output tokens bought."
+ }
+ },
+ "multiplexMultiHopSellTokenForEth(address[],(uint8,bytes)[],uint256,uint256)": {
+ "details": "Sells `sellAmount` of the input token (`tokens[0]`) for ETH via the given sequence of tokens and calls. The last token in `tokens` must be WETH.",
+ "params": {
+ "calls": "The sequence of calls to use for the sell.",
+ "minBuyAmount": "The minimum amount of ETH that must be bought for this function to not revert.",
+ "tokens": "The sequence of tokens to use for the sell, i.e. `tokens[i]` will be sold for `tokens[i+1]` via `calls[i]`."
+ },
+ "returns": {
+ "boughtAmount": "The amount of ETH bought."
+ }
+ },
+ "multiplexMultiHopSellTokenForToken(address[],(uint8,bytes)[],uint256,uint256)": {
+ "details": "Sells `sellAmount` of the input token (`tokens[0]`) via the given sequence of tokens and calls. The last token in `tokens` is the output token that will ultimately be sent to `msg.sender`",
+ "params": {
+ "calls": "The sequence of calls to use for the sell.",
+ "minBuyAmount": "The minimum amount of output tokens that must be bought for this function to not revert.",
+ "tokens": "The sequence of tokens to use for the sell, i.e. `tokens[i]` will be sold for `tokens[i+1]` via `calls[i]`."
+ },
+ "returns": {
+ "boughtAmount": "The amount of output tokens bought."
+ }
+ },
+ "onERC1155Received(address,address,uint256,uint256,bytes)": {
+ "details": "Callback for the ERC1155 `safeTransferFrom` function. This callback can be used to sell an ERC1155 asset if a valid ERC1155 order, signature and `unwrapNativeToken` are encoded in `data`. This allows takers to sell their ERC1155 asset without first calling `setApprovalForAll`.",
+ "params": {
+ "data": "Additional data with no specified format. If a valid ERC1155 order, signature and `unwrapNativeToken` are encoded in `data`, this function will try to fill the order using the received asset.",
+ "from": "The address which previously owned the token.",
+ "operator": "The address which called `safeTransferFrom`.",
+ "tokenId": "The ID of the asset being transferred.",
+ "value": "The amount being transferred."
+ },
+ "returns": {
+ "success": "The selector of this function (0xf23a6e61), indicating that the callback succeeded."
+ }
+ },
+ "onERC721Received(address,address,uint256,bytes)": {
+ "details": "Callback for the ERC721 `safeTransferFrom` function. This callback can be used to sell an ERC721 asset if a valid ERC721 order, signature and `unwrapNativeToken` are encoded in `data`. This allows takers to sell their ERC721 asset without first calling `setApprovalForAll`.",
+ "params": {
+ "data": "Additional data with no specified format. If a valid ERC721 order, signature and `unwrapNativeToken` are encoded in `data`, this function will try to fill the order using the received asset.",
+ "from": "The address which previously owned the token.",
+ "operator": "The address which called `safeTransferFrom`.",
+ "tokenId": "The ID of the asset being transferred."
+ },
+ "returns": {
+ "success": "The selector of this function (0x150b7a02), indicating that the callback succeeded."
+ }
+ },
+ "owner()": {
+ "details": "The owner of this contract.",
+ "returns": {
+ "ownerAddress": "The owner address."
+ }
+ },
+ "preSignERC1155Order((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128))": {
+ "details": "Approves an ERC1155 order on-chain. After pre-signing the order, the `PRESIGNED` signature type will become valid for that order and signer.",
+ "params": {
+ "order": "An ERC1155 order."
+ }
+ },
+ "preSignERC721Order((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]))": {
+ "details": "Approves an ERC721 order on-chain. After pre-signing the order, the `PRESIGNED` signature type will become valid for that order and signer.",
+ "params": {
+ "order": "An ERC721 order."
+ }
+ },
+ "registerAllowedOrderSigner(address,bool)": {
+ "details": "Register a signer who can sign on behalf of msg.sender This allows one to sign on behalf of a contract that calls this function",
+ "params": {
+ "allowed": "True to register, false to unregister.",
+ "signer": "The address from which you plan to generate signatures"
+ }
+ },
+ "registerAllowedRfqOrigins(address[],bool)": {
+ "details": "Mark what tx.origin addresses are allowed to fill an order that specifies the message sender as its txOrigin.",
+ "params": {
+ "allowed": "True to register, false to unregister.",
+ "origins": "An array of origin addresses to update."
+ }
+ },
+ "rollback(bytes4,address)": {
+ "details": "Roll back to a prior implementation of a function.",
+ "params": {
+ "selector": "The function selector.",
+ "targetImpl": "The address of an older implementation of the function."
+ }
+ },
+ "sellERC1155((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128),(uint8,uint8,bytes32,bytes32),uint256,uint128,bool,bytes)": {
+ "details": "Sells an ERC1155 asset to fill the given order.",
+ "params": {
+ "buyOrder": "The ERC1155 buy order.",
+ "callbackData": "If this parameter is non-zero, invokes `zeroExERC1155OrderCallback` on `msg.sender` after the ERC20 tokens have been transferred to `msg.sender` but before transferring the ERC1155 asset to the buyer.",
+ "erc1155SellAmount": "The amount of the ERC1155 asset to sell.",
+ "erc1155TokenId": "The ID of the ERC1155 asset being sold. If the given order specifies properties, the asset must satisfy those properties. Otherwise, it must equal the tokenId in the order.",
+ "signature": "The order signature from the maker.",
+ "unwrapNativeToken": "If this parameter is true and the ERC20 token of the order is e.g. WETH, unwraps the token before transferring it to the taker."
+ }
+ },
+ "sellERC721((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]),(uint8,uint8,bytes32,bytes32),uint256,bool,bytes)": {
+ "details": "Sells an ERC721 asset to fill the given order.",
+ "params": {
+ "buyOrder": "The ERC721 buy order.",
+ "callbackData": "If this parameter is non-zero, invokes `zeroExERC721OrderCallback` on `msg.sender` after the ERC20 tokens have been transferred to `msg.sender` but before transferring the ERC721 asset to the buyer.",
+ "erc721TokenId": "The ID of the ERC721 asset being sold. If the given order specifies properties, the asset must satisfy those properties. Otherwise, it must equal the tokenId in the order.",
+ "signature": "The order signature from the maker.",
+ "unwrapNativeToken": "If this parameter is true and the ERC20 token of the order is e.g. WETH, unwraps the token before transferring it to the taker."
+ }
+ },
+ "sellEthForTokenToUniswapV3(bytes,uint256,address)": {
+ "details": "Sell attached ETH directly against uniswap v3.",
+ "params": {
+ "encodedPath": "Uniswap-encoded path, where the first token is WETH.",
+ "minBuyAmount": "Minimum amount of the last token in the path to buy.",
+ "recipient": "The recipient of the bought tokens. Can be zero for sender."
+ },
+ "returns": {
+ "buyAmount": "Amount of the last token in the path bought."
+ }
+ },
+ "sellToLiquidityProvider(address,address,address,address,uint256,uint256,bytes)": {
+ "details": "Sells `sellAmount` of `inputToken` to the liquidity provider at the given `provider` address.",
+ "params": {
+ "auxiliaryData": "Auxiliary data supplied to the `provider` contract.",
+ "inputToken": "The token being sold.",
+ "minBuyAmount": "The minimum acceptable amount of `outputToken` to buy. Reverts if this amount is not satisfied.",
+ "outputToken": "The token being bought.",
+ "provider": "The address of the on-chain liquidity provider to trade with.",
+ "recipient": "The recipient of the bought tokens. If equal to address(0), `msg.sender` is assumed to be the recipient.",
+ "sellAmount": "The amount of `inputToken` to sell."
+ },
+ "returns": {
+ "boughtAmount": "The amount of `outputToken` bought."
+ }
+ },
+ "sellToPancakeSwap(address[],uint256,uint256,uint8)": {
+ "details": "Efficiently sell directly to PancakeSwap (and forks).",
+ "params": {
+ "fork": "The protocol fork to use.",
+ "minBuyAmount": "Minimum amount of `tokens[-1]` to buy.",
+ "sellAmount": "of `tokens[0]` Amount to sell.",
+ "tokens": "Sell path."
},
- {
- "components": [
- {
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
- "type": "uint8"
- },
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "expiry",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "erc20TokenAmount",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
- },
- {
- "internalType": "contract IERC721Token",
- "name": "erc721Token",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "erc721TokenId",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc721TokenProperties",
- "type": "tuple[]"
- }
- ],
- "internalType": "struct LibNFTOrder.ERC721Order[]",
- "name": "buyOrders",
- "type": "tuple[]"
+ "returns": {
+ "buyAmount": "Amount of `tokens[-1]` bought."
+ }
+ },
+ "sellToUniswap(address[],uint256,uint256,bool)": {
+ "details": "Efficiently sell directly to uniswap/sushiswap.",
+ "params": {
+ "isSushi": "Use sushiswap if true.",
+ "minBuyAmount": "Minimum amount of `tokens[-1]` to buy.",
+ "sellAmount": "of `tokens[0]` Amount to sell.",
+ "tokens": "Sell path."
},
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature[]",
- "name": "sellOrderSignatures",
- "type": "tuple[]"
+ "returns": {
+ "buyAmount": "Amount of `tokens[-1]` bought."
+ }
+ },
+ "sellTokenForEthToUniswapV3(bytes,uint256,uint256,address)": {
+ "details": "Sell a token for ETH directly against uniswap v3.",
+ "params": {
+ "encodedPath": "Uniswap-encoded path, where the last token is WETH.",
+ "minBuyAmount": "Minimum amount of ETH to buy.",
+ "recipient": "The recipient of the bought tokens. Can be zero for sender.",
+ "sellAmount": "amount of the first token in the path to sell."
},
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature[]",
- "name": "buyOrderSignatures",
- "type": "tuple[]"
+ "returns": {
+ "buyAmount": "Amount of ETH bought."
+ }
+ },
+ "sellTokenForTokenToUniswapV3(bytes,uint256,uint256,address)": {
+ "details": "Sell a token for another token directly against uniswap v3.",
+ "params": {
+ "encodedPath": "Uniswap-encoded path.",
+ "minBuyAmount": "Minimum amount of the last token in the path to buy.",
+ "recipient": "The recipient of the bought tokens. Can be zero for sender.",
+ "sellAmount": "amount of the first token in the path to sell."
+ },
+ "returns": {
+ "buyAmount": "Amount of the last token in the path bought."
+ }
+ },
+ "setQuoteSigner(address)": {
+ "details": "Replace the optional signer for `transformERC20()` calldata. Only callable by the owner.",
+ "params": {
+ "quoteSigner": "The address of the new calldata signer."
+ }
+ },
+ "setTransformerDeployer(address)": {
+ "details": "Replace the allowed deployer for transformers. Only callable by the owner.",
+ "params": {
+ "transformerDeployer": "The address of the new trusted deployer for transformers."
+ }
+ },
+ "supportInterface(bytes4)": {
+ "details": "Indicates whether the 0x Exchange Proxy implements a particular ERC165 interface. This function should use at most 30,000 gas.",
+ "params": {
+ "interfaceId": "The interface identifier, as specified in ERC165."
+ },
+ "returns": {
+ "isSupported": "Whether the given interface is supported by the 0x Exchange Proxy."
+ }
+ },
+ "transferOwnership(address)": {
+ "details": "Transfers ownership of the contract to a new address.",
+ "params": {
+ "newOwner": "The address that will become the owner."
+ }
+ },
+ "transferProtocolFeesForPools(bytes32[])": {
+ "details": "Transfers protocol fees from the `FeeCollector` pools into the staking contract.",
+ "params": {
+ "poolIds": "Staking pool IDs"
+ }
+ },
+ "transferTrappedTokensTo(address,uint256,address)": {
+ "details": "calledFrom FundRecoveryFeature.transferTrappedTokensTo() This will be delegatecalled in the context of the Exchange Proxy instance being used.",
+ "params": {
+ "amountOut": "Amount of tokens to withdraw.",
+ "erc20": "ERC20 Token Address.",
+ "recipientWallet": "Recipient wallet address."
+ }
+ },
+ "transformERC20(address,address,uint256,uint256,(uint32,bytes)[])": {
+ "details": "Executes a series of transformations to convert an ERC20 `inputToken` to an ERC20 `outputToken`.",
+ "params": {
+ "inputToken": "The token being provided by the sender. If `0xeee...`, ETH is implied and should be provided with the call.`",
+ "inputTokenAmount": "The amount of `inputToken` to take from the sender.",
+ "minOutputTokenAmount": "The minimum amount of `outputToken` the sender must receive for the entire transformation to succeed.",
+ "outputToken": "The token to be acquired by the sender. `0xeee...` implies ETH.",
+ "transformations": "The transformations to execute on the token balance(s) in sequence."
+ },
+ "returns": {
+ "outputTokenAmount": "The amount of `outputToken` received by the sender."
+ }
+ },
+ "uniswapV3SwapCallback(int256,int256,bytes)": {
+ "details": "The UniswapV3 pool swap callback which pays the funds requested by the caller/pool to the pool. Can only be called by a valid UniswapV3 pool.",
+ "params": {
+ "amount0Delta": "Token0 amount owed.",
+ "amount1Delta": "Token1 amount owed.",
+ "data": "Arbitrary data forwarded from swap() caller. An ABI-encoded struct of: inputToken, outputToken, fee, payer"
+ }
+ },
+ "validateERC1155OrderProperties((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128),uint256)": {
+ "details": "If the given order is buying an ERC1155 asset, checks whether or not the given token ID satisfies the required properties specified in the order. If the order does not specify any properties, this function instead checks whether the given token ID matches the ID in the order. Reverts if any checks fail, or if the order is selling an ERC1155 asset.",
+ "params": {
+ "erc1155TokenId": "The ID of the ERC1155 asset.",
+ "order": "The ERC1155 order."
+ }
+ },
+ "validateERC1155OrderSignature((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128),(uint8,uint8,bytes32,bytes32))": {
+ "details": "Checks whether the given signature is valid for the the given ERC1155 order. Reverts if not.",
+ "params": {
+ "order": "The ERC1155 order.",
+ "signature": "The signature to validate."
}
- ],
- "name": "batchMatchERC721Orders",
- "outputs": [
- {
- "internalType": "uint256[]",
- "name": "profits",
- "type": "uint256[]"
- },
- {
- "internalType": "bool[]",
- "name": "successes",
- "type": "bool[]"
+ },
+ "validateERC721OrderProperties((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]),uint256)": {
+ "details": "If the given order is buying an ERC721 asset, checks whether or not the given token ID satisfies the required properties specified in the order. If the order does not specify any properties, this function instead checks whether the given token ID matches the ID in the order. Reverts if any checks fail, or if the order is selling an ERC721 asset.",
+ "params": {
+ "erc721TokenId": "The ID of the ERC721 asset.",
+ "order": "The ERC721 order."
}
- ],
- "stateMutability": "nonpayable",
- "type": "function"
+ },
+ "validateERC721OrderSignature((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]),(uint8,uint8,bytes32,bytes32))": {
+ "details": "Checks whether the given signature is valid for the the given ERC721 order. Reverts if not.",
+ "params": {
+ "order": "The ERC721 order.",
+ "signature": "The signature to validate."
+ }
+ }
},
+ "version": 1
+ },
+ "_disabled": [
{
"inputs": [
{
"components": [
{
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
- "type": "uint8"
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
+ "type": "address"
},
{
- "internalType": "address",
- "name": "maker",
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
"type": "address"
},
{
- "internalType": "address",
- "name": "taker",
- "type": "address"
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
},
{
- "internalType": "uint256",
- "name": "expiry",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
},
{
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "takerTokenFeeAmount",
+ "type": "uint128"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
+ "internalType": "address",
+ "name": "maker",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "erc20TokenAmount",
- "type": "uint256"
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
},
{
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
},
{
- "internalType": "contract IERC1155Token",
- "name": "erc1155Token",
+ "internalType": "address",
+ "name": "feeRecipient",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "erc1155TokenId",
- "type": "uint256"
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
},
{
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc1155TokenProperties",
- "type": "tuple[]"
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
},
{
- "internalType": "uint128",
- "name": "erc1155TokenAmount",
- "type": "uint128"
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
}
],
- "internalType": "struct LibNFTOrder.ERC1155Order",
- "name": "sellOrder",
+ "internalType": "struct LibNativeOrder.LimitOrder",
+ "name": "order",
"type": "tuple"
},
{
@@ -3019,17 +2253,33 @@
},
{
"internalType": "uint128",
- "name": "erc1155BuyAmount",
+ "name": "takerTokenFillAmount",
"type": "uint128"
},
{
- "internalType": "bytes",
- "name": "callbackData",
- "type": "bytes"
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ }
+ ],
+ "name": "_fillLimitOrder",
+ "outputs": [
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "makerTokenFilledAmount",
+ "type": "uint128"
}
],
- "name": "buyERC1155",
- "outputs": [],
"stateMutability": "payable",
"type": "function"
},
@@ -3038,92 +2288,48 @@
{
"components": [
{
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
- "type": "uint8"
- },
- {
- "internalType": "address",
- "name": "maker",
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
"type": "address"
},
{
- "internalType": "address",
- "name": "taker",
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "expiry",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
},
{
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
+ "internalType": "address",
+ "name": "maker",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "erc20TokenAmount",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
},
{
- "internalType": "contract IERC721Token",
- "name": "erc721Token",
+ "internalType": "address",
+ "name": "txOrigin",
"type": "address"
},
{
"internalType": "uint256",
- "name": "erc721TokenId",
+ "name": "expiryAndNonce",
"type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc721TokenProperties",
- "type": "tuple[]"
}
],
- "internalType": "struct LibNFTOrder.ERC721Order",
- "name": "sellOrder",
+ "internalType": "struct LibNativeOrder.OtcOrder",
+ "name": "order",
"type": "tuple"
},
{
@@ -3150,43 +2356,43 @@
}
],
"internalType": "struct LibSignature.Signature",
- "name": "signature",
+ "name": "makerSignature",
"type": "tuple"
},
{
- "internalType": "bytes",
- "name": "callbackData",
- "type": "bytes"
- }
- ],
- "name": "buyERC721",
- "outputs": [],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "inputs": [
+ "internalType": "uint128",
+ "name": "takerTokenFillAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "useSelfBalance",
+ "type": "bool"
+ },
{
- "internalType": "uint256",
- "name": "orderNonce",
- "type": "uint256"
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
}
],
- "name": "cancelERC1155Order",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
+ "name": "_fillOtcOrder",
+ "outputs": [
{
- "internalType": "uint256",
- "name": "orderNonce",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "makerTokenFilledAmount",
+ "type": "uint128"
}
],
- "name": "cancelERC721Order",
- "outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
@@ -3214,11 +2420,6 @@
"name": "takerAmount",
"type": "uint128"
},
- {
- "internalType": "uint128",
- "name": "takerTokenFeeAmount",
- "type": "uint128"
- },
{
"internalType": "address",
"name": "maker",
@@ -3231,12 +2432,7 @@
},
{
"internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "feeRecipient",
+ "name": "txOrigin",
"type": "address"
},
{
@@ -3255,115 +2451,105 @@
"type": "uint256"
}
],
- "internalType": "struct LibNativeOrder.LimitOrder",
+ "internalType": "struct LibNativeOrder.RfqOrder",
"name": "order",
"type": "tuple"
- }
- ],
- "name": "cancelLimitOrder",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
- "type": "address"
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "signature",
+ "type": "tuple"
},
{
- "internalType": "uint256",
- "name": "minValidSalt",
- "type": "uint256"
- }
- ],
- "name": "cancelPairLimitOrders",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
+ "internalType": "uint128",
+ "name": "takerTokenFillAmount",
+ "type": "uint128"
+ },
{
"internalType": "address",
- "name": "maker",
+ "name": "taker",
"type": "address"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
+ "internalType": "bool",
+ "name": "useSelfBalance",
+ "type": "bool"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
+ "internalType": "address",
+ "name": "recipient",
"type": "address"
+ }
+ ],
+ "name": "_fillRfqOrder",
+ "outputs": [
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
},
{
- "internalType": "uint256",
- "name": "minValidSalt",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "makerTokenFilledAmount",
+ "type": "uint128"
}
],
- "name": "cancelPairLimitOrdersWithSigner",
- "outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
- "type": "address"
+ "internalType": "bytes",
+ "name": "encodedPath",
+ "type": "bytes"
},
{
"internalType": "uint256",
- "name": "minValidSalt",
+ "name": "sellAmount",
"type": "uint256"
- }
- ],
- "name": "cancelPairRfqOrders",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
+ "internalType": "uint256",
+ "name": "minBuyAmount",
+ "type": "uint256"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
+ "internalType": "address",
+ "name": "recipient",
"type": "address"
- },
+ }
+ ],
+ "name": "_sellHeldTokenForTokenToUniswapV3",
+ "outputs": [
{
"internalType": "uint256",
- "name": "minValidSalt",
+ "name": "buyAmount",
"type": "uint256"
}
],
- "name": "cancelPairRfqOrdersWithSigner",
- "outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
@@ -3372,77 +2558,72 @@
{
"components": [
{
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
+ "internalType": "address payable",
+ "name": "taker",
"type": "address"
},
{
"internalType": "contract IERC20TokenV06",
- "name": "takerToken",
+ "name": "inputToken",
"type": "address"
},
{
- "internalType": "uint128",
- "name": "makerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerAmount",
- "type": "uint128"
- },
- {
- "internalType": "address",
- "name": "maker",
+ "internalType": "contract IERC20TokenV06",
+ "name": "outputToken",
"type": "address"
},
{
- "internalType": "address",
- "name": "taker",
- "type": "address"
+ "internalType": "uint256",
+ "name": "inputTokenAmount",
+ "type": "uint256"
},
{
- "internalType": "address",
- "name": "txOrigin",
- "type": "address"
+ "internalType": "uint256",
+ "name": "minOutputTokenAmount",
+ "type": "uint256"
},
{
- "internalType": "bytes32",
- "name": "pool",
- "type": "bytes32"
+ "components": [
+ {
+ "internalType": "uint32",
+ "name": "deploymentNonce",
+ "type": "uint32"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct ITransformERC20Feature.Transformation[]",
+ "name": "transformations",
+ "type": "tuple[]"
},
{
- "internalType": "uint64",
- "name": "expiry",
- "type": "uint64"
+ "internalType": "bool",
+ "name": "useSelfBalance",
+ "type": "bool"
},
{
- "internalType": "uint256",
- "name": "salt",
- "type": "uint256"
+ "internalType": "address payable",
+ "name": "recipient",
+ "type": "address"
}
],
- "internalType": "struct LibNativeOrder.RfqOrder",
- "name": "order",
+ "internalType": "struct ITransformERC20Feature.TransformERC20Args",
+ "name": "args",
"type": "tuple"
}
],
- "name": "cancelRfqOrder",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "createTransformWallet",
+ "name": "_transformERC20",
"outputs": [
{
- "internalType": "contract IFlashWallet",
- "name": "wallet",
- "type": "address"
+ "internalType": "uint256",
+ "name": "outputTokenAmount",
+ "type": "uint256"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "payable",
"type": "function"
},
{
@@ -3450,59 +2631,98 @@
{
"components": [
{
- "internalType": "address payable",
- "name": "signer",
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
"type": "address"
},
{
"internalType": "address",
- "name": "sender",
+ "name": "taker",
"type": "address"
},
{
"internalType": "uint256",
- "name": "minGasPrice",
+ "name": "expiry",
"type": "uint256"
},
{
"internalType": "uint256",
- "name": "maxGasPrice",
+ "name": "nonce",
"type": "uint256"
},
{
- "internalType": "uint256",
- "name": "expirationTimeSeconds",
- "type": "uint256"
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20Token",
+ "type": "address"
},
{
"internalType": "uint256",
- "name": "salt",
+ "name": "erc20TokenAmount",
"type": "uint256"
},
{
- "internalType": "bytes",
- "name": "callData",
- "type": "bytes"
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "contract IERC1155Token",
+ "name": "erc1155Token",
+ "type": "address"
},
{
"internalType": "uint256",
- "name": "value",
+ "name": "erc1155TokenId",
"type": "uint256"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "feeToken",
- "type": "address"
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc1155TokenProperties",
+ "type": "tuple[]"
},
{
- "internalType": "uint256",
- "name": "feeAmount",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "erc1155TokenAmount",
+ "type": "uint128"
}
],
- "internalType": "struct IMetaTransactionsFeature.MetaTransactionData",
- "name": "mtx",
- "type": "tuple"
+ "internalType": "struct LibNFTOrder.ERC1155Order[]",
+ "name": "sellOrders",
+ "type": "tuple[]"
},
{
"components": [
@@ -3527,68 +2747,45 @@
"type": "bytes32"
}
],
- "internalType": "struct LibSignature.Signature",
- "name": "signature",
- "type": "tuple"
+ "internalType": "struct LibSignature.Signature[]",
+ "name": "signatures",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint128[]",
+ "name": "erc1155TokenAmounts",
+ "type": "uint128[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "callbackData",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bool",
+ "name": "revertIfIncomplete",
+ "type": "bool"
}
],
- "name": "executeMetaTransaction",
+ "name": "batchBuyERC1155s",
"outputs": [
{
- "internalType": "bytes",
- "name": "returnResult",
- "type": "bytes"
+ "internalType": "bool[]",
+ "name": "successes",
+ "type": "bool[]"
}
],
"stateMutability": "payable",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "bytes4",
- "name": "selector",
- "type": "bytes4"
- },
- {
- "internalType": "address",
- "name": "impl",
- "type": "address"
- }
- ],
- "name": "extend",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
"components": [
{
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
- "type": "address"
- },
- {
- "internalType": "uint128",
- "name": "makerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerTokenFeeAmount",
- "type": "uint128"
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
},
{
"internalType": "address",
@@ -3601,34 +2798,78 @@
"type": "address"
},
{
- "internalType": "address",
- "name": "sender",
- "type": "address"
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
},
{
- "internalType": "address",
- "name": "feeRecipient",
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20Token",
"type": "address"
},
{
- "internalType": "bytes32",
- "name": "pool",
- "type": "bytes32"
+ "internalType": "uint256",
+ "name": "erc20TokenAmount",
+ "type": "uint256"
},
{
- "internalType": "uint64",
- "name": "expiry",
- "type": "uint64"
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "contract IERC721Token",
+ "name": "erc721Token",
+ "type": "address"
},
{
"internalType": "uint256",
- "name": "salt",
+ "name": "erc721TokenId",
"type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc721TokenProperties",
+ "type": "tuple[]"
}
],
- "internalType": "struct LibNativeOrder.LimitOrder",
- "name": "order",
- "type": "tuple"
+ "internalType": "struct LibNFTOrder.ERC721Order[]",
+ "name": "sellOrders",
+ "type": "tuple[]"
},
{
"components": [
@@ -3653,32 +2894,58 @@
"type": "bytes32"
}
],
- "internalType": "struct LibSignature.Signature",
- "name": "signature",
- "type": "tuple"
+ "internalType": "struct LibSignature.Signature[]",
+ "name": "signatures",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "callbackData",
+ "type": "bytes[]"
},
{
- "internalType": "uint128",
- "name": "takerTokenFillAmount",
- "type": "uint128"
+ "internalType": "bool",
+ "name": "revertIfIncomplete",
+ "type": "bool"
}
],
- "name": "fillLimitOrder",
+ "name": "batchBuyERC721s",
"outputs": [
{
- "internalType": "uint128",
- "name": "takerTokenFilledAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "makerTokenFilledAmount",
- "type": "uint128"
+ "internalType": "bool[]",
+ "name": "successes",
+ "type": "bool[]"
}
],
"stateMutability": "payable",
"type": "function"
},
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "orderNonces",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "batchCancelERC1155Orders",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "orderNonces",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "batchCancelERC721Orders",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
{
"inputs": [
{
@@ -3744,52 +3011,116 @@
"type": "uint256"
}
],
- "internalType": "struct LibNativeOrder.LimitOrder",
- "name": "order",
- "type": "tuple"
+ "internalType": "struct LibNativeOrder.LimitOrder[]",
+ "name": "orders",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "batchCancelLimitOrders",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20TokenV06[]",
+ "name": "makerTokens",
+ "type": "address[]"
},
{
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature",
- "name": "signature",
- "type": "tuple"
+ "internalType": "contract IERC20TokenV06[]",
+ "name": "takerTokens",
+ "type": "address[]"
},
{
- "internalType": "uint128",
- "name": "takerTokenFillAmount",
- "type": "uint128"
+ "internalType": "uint256[]",
+ "name": "minValidSalts",
+ "type": "uint256[]"
}
],
- "name": "fillOrKillLimitOrder",
- "outputs": [
+ "name": "batchCancelPairLimitOrders",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
{
- "internalType": "uint128",
- "name": "makerTokenFilledAmount",
- "type": "uint128"
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20TokenV06[]",
+ "name": "makerTokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "contract IERC20TokenV06[]",
+ "name": "takerTokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "minValidSalts",
+ "type": "uint256[]"
}
],
- "stateMutability": "payable",
+ "name": "batchCancelPairLimitOrdersWithSigner",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20TokenV06[]",
+ "name": "makerTokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "contract IERC20TokenV06[]",
+ "name": "takerTokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "minValidSalts",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "batchCancelPairRfqOrders",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20TokenV06[]",
+ "name": "makerTokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "contract IERC20TokenV06[]",
+ "name": "takerTokens",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "minValidSalts",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "batchCancelPairRfqOrdersWithSigner",
+ "outputs": [],
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -3847,9 +3178,74 @@
"type": "uint256"
}
],
- "internalType": "struct LibNativeOrder.RfqOrder",
- "name": "order",
- "type": "tuple"
+ "internalType": "struct LibNativeOrder.RfqOrder[]",
+ "name": "orders",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "batchCancelRfqOrders",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address payable",
+ "name": "signer",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minGasPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxGasPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expirationTimeSeconds",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "feeToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "feeAmount",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct IMetaTransactionsFeature.MetaTransactionData[]",
+ "name": "mtxs",
+ "type": "tuple[]"
},
{
"components": [
@@ -3874,25 +3270,20 @@
"type": "bytes32"
}
],
- "internalType": "struct LibSignature.Signature",
- "name": "signature",
- "type": "tuple"
- },
- {
- "internalType": "uint128",
- "name": "takerTokenFillAmount",
- "type": "uint128"
+ "internalType": "struct LibSignature.Signature[]",
+ "name": "signatures",
+ "type": "tuple[]"
}
],
- "name": "fillOrKillRfqOrder",
+ "name": "batchExecuteMetaTransactions",
"outputs": [
{
- "internalType": "uint128",
- "name": "makerTokenFilledAmount",
- "type": "uint128"
+ "internalType": "bytes[]",
+ "name": "returnResults",
+ "type": "bytes[]"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "payable",
"type": "function"
},
{
@@ -3919,6 +3310,11 @@
"name": "takerAmount",
"type": "uint128"
},
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFeeAmount",
+ "type": "uint128"
+ },
{
"internalType": "address",
"name": "maker",
@@ -3931,18 +3327,33 @@
},
{
"internalType": "address",
- "name": "txOrigin",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "feeRecipient",
"type": "address"
},
+ {
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
+ },
{
"internalType": "uint256",
- "name": "expiryAndNonce",
+ "name": "salt",
"type": "uint256"
}
],
- "internalType": "struct LibNativeOrder.OtcOrder",
- "name": "order",
- "type": "tuple"
+ "internalType": "struct LibNativeOrder.LimitOrder[]",
+ "name": "orders",
+ "type": "tuple[]"
},
{
"components": [
@@ -3967,30 +3378,35 @@
"type": "bytes32"
}
],
- "internalType": "struct LibSignature.Signature",
- "name": "makerSignature",
- "type": "tuple"
+ "internalType": "struct LibSignature.Signature[]",
+ "name": "signatures",
+ "type": "tuple[]"
},
{
- "internalType": "uint128",
- "name": "takerTokenFillAmount",
- "type": "uint128"
+ "internalType": "uint128[]",
+ "name": "takerTokenFillAmounts",
+ "type": "uint128[]"
+ },
+ {
+ "internalType": "bool",
+ "name": "revertIfIncomplete",
+ "type": "bool"
}
],
- "name": "fillOtcOrder",
+ "name": "batchFillLimitOrders",
"outputs": [
{
- "internalType": "uint128",
- "name": "takerTokenFilledAmount",
- "type": "uint128"
+ "internalType": "uint128[]",
+ "name": "takerTokenFilledAmounts",
+ "type": "uint128[]"
},
{
- "internalType": "uint128",
- "name": "makerTokenFilledAmount",
- "type": "uint128"
+ "internalType": "uint128[]",
+ "name": "makerTokenFilledAmounts",
+ "type": "uint128[]"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "payable",
"type": "function"
},
{
@@ -4032,15 +3448,25 @@
"name": "txOrigin",
"type": "address"
},
+ {
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
+ },
{
"internalType": "uint256",
- "name": "expiryAndNonce",
+ "name": "salt",
"type": "uint256"
}
],
- "internalType": "struct LibNativeOrder.OtcOrder",
- "name": "order",
- "type": "tuple"
+ "internalType": "struct LibNativeOrder.RfqOrder[]",
+ "name": "orders",
+ "type": "tuple[]"
},
{
"components": [
@@ -4065,27 +3491,32 @@
"type": "bytes32"
}
],
- "internalType": "struct LibSignature.Signature",
- "name": "makerSignature",
- "type": "tuple"
+ "internalType": "struct LibSignature.Signature[]",
+ "name": "signatures",
+ "type": "tuple[]"
},
{
- "internalType": "uint128",
- "name": "takerTokenFillAmount",
- "type": "uint128"
+ "internalType": "uint128[]",
+ "name": "takerTokenFillAmounts",
+ "type": "uint128[]"
+ },
+ {
+ "internalType": "bool",
+ "name": "revertIfIncomplete",
+ "type": "bool"
}
],
- "name": "fillOtcOrderForEth",
+ "name": "batchFillRfqOrders",
"outputs": [
{
- "internalType": "uint128",
- "name": "takerTokenFilledAmount",
- "type": "uint128"
+ "internalType": "uint128[]",
+ "name": "takerTokenFilledAmounts",
+ "type": "uint128[]"
},
{
- "internalType": "uint128",
- "name": "makerTokenFilledAmount",
- "type": "uint128"
+ "internalType": "uint128[]",
+ "name": "makerTokenFilledAmounts",
+ "type": "uint128[]"
}
],
"stateMutability": "nonpayable",
@@ -4136,9 +3567,9 @@
"type": "uint256"
}
],
- "internalType": "struct LibNativeOrder.OtcOrder",
- "name": "order",
- "type": "tuple"
+ "internalType": "struct LibNativeOrder.OtcOrder[]",
+ "name": "orders",
+ "type": "tuple[]"
},
{
"components": [
@@ -4163,25 +3594,52 @@
"type": "bytes32"
}
],
- "internalType": "struct LibSignature.Signature",
- "name": "makerSignature",
- "type": "tuple"
+ "internalType": "struct LibSignature.Signature[]",
+ "name": "makerSignatures",
+ "type": "tuple[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature[]",
+ "name": "takerSignatures",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "bool[]",
+ "name": "unwrapWeth",
+ "type": "bool[]"
}
],
- "name": "fillOtcOrderWithEth",
+ "name": "batchFillTakerSignedOtcOrders",
"outputs": [
{
- "internalType": "uint128",
- "name": "takerTokenFilledAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "makerTokenFilledAmount",
- "type": "uint128"
+ "internalType": "bool[]",
+ "name": "successes",
+ "type": "bool[]"
}
],
- "stateMutability": "payable",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -4208,6 +3666,11 @@
"name": "takerAmount",
"type": "uint128"
},
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFeeAmount",
+ "type": "uint128"
+ },
{
"internalType": "address",
"name": "maker",
@@ -4220,7 +3683,12 @@
},
{
"internalType": "address",
- "name": "txOrigin",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "feeRecipient",
"type": "address"
},
{
@@ -4239,9 +3707,9 @@
"type": "uint256"
}
],
- "internalType": "struct LibNativeOrder.RfqOrder",
- "name": "order",
- "type": "tuple"
+ "internalType": "struct LibNativeOrder.LimitOrder[]",
+ "name": "orders",
+ "type": "tuple[]"
},
{
"components": [
@@ -4266,30 +3734,47 @@
"type": "bytes32"
}
],
- "internalType": "struct LibSignature.Signature",
- "name": "signature",
- "type": "tuple"
- },
- {
- "internalType": "uint128",
- "name": "takerTokenFillAmount",
- "type": "uint128"
+ "internalType": "struct LibSignature.Signature[]",
+ "name": "signatures",
+ "type": "tuple[]"
}
],
- "name": "fillRfqOrder",
+ "name": "batchGetLimitOrderRelevantStates",
"outputs": [
{
- "internalType": "uint128",
- "name": "takerTokenFilledAmount",
- "type": "uint128"
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "orderHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "enum LibNativeOrder.OrderStatus",
+ "name": "status",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
+ }
+ ],
+ "internalType": "struct LibNativeOrder.OrderInfo[]",
+ "name": "orderInfos",
+ "type": "tuple[]"
},
{
- "internalType": "uint128",
- "name": "makerTokenFilledAmount",
- "type": "uint128"
+ "internalType": "uint128[]",
+ "name": "actualFillableTakerTokenAmounts",
+ "type": "uint128[]"
+ },
+ {
+ "internalType": "bool[]",
+ "name": "isSignatureValids",
+ "type": "bool[]"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
@@ -4331,15 +3816,25 @@
"name": "txOrigin",
"type": "address"
},
+ {
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
+ },
{
"internalType": "uint256",
- "name": "expiryAndNonce",
+ "name": "salt",
"type": "uint256"
}
],
- "internalType": "struct LibNativeOrder.OtcOrder",
- "name": "order",
- "type": "tuple"
+ "internalType": "struct LibNativeOrder.RfqOrder[]",
+ "name": "orders",
+ "type": "tuple[]"
},
{
"components": [
@@ -4364,41 +3859,47 @@
"type": "bytes32"
}
],
- "internalType": "struct LibSignature.Signature",
- "name": "makerSignature",
- "type": "tuple"
- },
+ "internalType": "struct LibSignature.Signature[]",
+ "name": "signatures",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "batchGetRfqOrderRelevantStates",
+ "outputs": [
{
"components": [
{
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
+ "internalType": "bytes32",
+ "name": "orderHash",
+ "type": "bytes32"
},
{
- "internalType": "uint8",
- "name": "v",
+ "internalType": "enum LibNativeOrder.OrderStatus",
+ "name": "status",
"type": "uint8"
},
{
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
}
],
- "internalType": "struct LibSignature.Signature",
- "name": "takerSignature",
- "type": "tuple"
+ "internalType": "struct LibNativeOrder.OrderInfo[]",
+ "name": "orderInfos",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint128[]",
+ "name": "actualFillableTakerTokenAmounts",
+ "type": "uint128[]"
+ },
+ {
+ "internalType": "bool[]",
+ "name": "isSignatureValids",
+ "type": "bool[]"
}
],
- "name": "fillTakerSignedOtcOrder",
- "outputs": [],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
@@ -4406,24 +3907,100 @@
{
"components": [
{
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
"type": "address"
},
+ {
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
{
"internalType": "contract IERC20TokenV06",
- "name": "takerToken",
+ "name": "erc20Token",
"type": "address"
},
{
- "internalType": "uint128",
- "name": "makerAmount",
- "type": "uint128"
+ "internalType": "uint256",
+ "name": "erc20TokenAmount",
+ "type": "uint256"
},
{
- "internalType": "uint128",
- "name": "takerAmount",
- "type": "uint128"
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "contract IERC721Token",
+ "name": "erc721Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc721TokenProperties",
+ "type": "tuple[]"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.ERC721Order[]",
+ "name": "sellOrders",
+ "type": "tuple[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
},
{
"internalType": "address",
@@ -4436,19 +4013,78 @@
"type": "address"
},
{
- "internalType": "address",
- "name": "txOrigin",
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20Token",
"type": "address"
},
{
"internalType": "uint256",
- "name": "expiryAndNonce",
+ "name": "erc20TokenAmount",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "contract IERC721Token",
+ "name": "erc721Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
"type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc721TokenProperties",
+ "type": "tuple[]"
}
],
- "internalType": "struct LibNativeOrder.OtcOrder",
- "name": "order",
- "type": "tuple"
+ "internalType": "struct LibNFTOrder.ERC721Order[]",
+ "name": "buyOrders",
+ "type": "tuple[]"
},
{
"components": [
@@ -4473,9 +4109,9 @@
"type": "bytes32"
}
],
- "internalType": "struct LibSignature.Signature",
- "name": "makerSignature",
- "type": "tuple"
+ "internalType": "struct LibSignature.Signature[]",
+ "name": "sellOrderSignatures",
+ "type": "tuple[]"
},
{
"components": [
@@ -4500,13 +4136,24 @@
"type": "bytes32"
}
],
- "internalType": "struct LibSignature.Signature",
- "name": "takerSignature",
- "type": "tuple"
+ "internalType": "struct LibSignature.Signature[]",
+ "name": "buyOrderSignatures",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "batchMatchERC721Orders",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "profits",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bool[]",
+ "name": "successes",
+ "type": "bool[]"
}
],
- "name": "fillTakerSignedOtcOrderForEth",
- "outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
@@ -4605,19 +4252,50 @@
}
],
"internalType": "struct LibNFTOrder.ERC1155Order",
- "name": "order",
+ "name": "sellOrder",
"type": "tuple"
- }
- ],
- "name": "getERC1155OrderHash",
- "outputs": [
+ },
{
- "internalType": "bytes32",
- "name": "orderHash",
- "type": "bytes32"
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "signature",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint128",
+ "name": "erc1155BuyAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callbackData",
+ "type": "bytes"
}
],
- "stateMutability": "view",
+ "name": "buyERC1155",
+ "outputs": [],
+ "stateMutability": "payable",
"type": "function"
},
{
@@ -4682,13 +4360,13 @@
"type": "tuple[]"
},
{
- "internalType": "contract IERC1155Token",
- "name": "erc1155Token",
+ "internalType": "contract IERC721Token",
+ "name": "erc721Token",
"type": "address"
},
{
"internalType": "uint256",
- "name": "erc1155TokenId",
+ "name": "erc721TokenId",
"type": "uint256"
},
{
@@ -4705,61 +4383,278 @@
}
],
"internalType": "struct LibNFTOrder.Property[]",
- "name": "erc1155TokenProperties",
+ "name": "erc721TokenProperties",
"type": "tuple[]"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.ERC721Order",
+ "name": "sellOrder",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "signature",
+ "type": "tuple"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callbackData",
+ "type": "bytes"
+ }
+ ],
+ "name": "buyERC721",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "orderNonce",
+ "type": "uint256"
+ }
+ ],
+ "name": "cancelERC1155Order",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "orderNonce",
+ "type": "uint256"
+ }
+ ],
+ "name": "cancelERC721Order",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
+ "type": "address"
},
{
"internalType": "uint128",
- "name": "erc1155TokenAmount",
+ "name": "makerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFeeAmount",
"type": "uint128"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "feeRecipient",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
}
],
- "internalType": "struct LibNFTOrder.ERC1155Order",
+ "internalType": "struct LibNativeOrder.LimitOrder",
"name": "order",
"type": "tuple"
}
],
- "name": "getERC1155OrderInfo",
- "outputs": [
+ "name": "cancelLimitOrder",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minValidSalt",
+ "type": "uint256"
+ }
+ ],
+ "name": "cancelPairLimitOrders",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minValidSalt",
+ "type": "uint256"
+ }
+ ],
+ "name": "cancelPairLimitOrdersWithSigner",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minValidSalt",
+ "type": "uint256"
+ }
+ ],
+ "name": "cancelPairRfqOrders",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minValidSalt",
+ "type": "uint256"
+ }
+ ],
+ "name": "cancelPairRfqOrdersWithSigner",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
{
"components": [
{
- "internalType": "bytes32",
- "name": "orderHash",
- "type": "bytes32"
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
+ "type": "address"
},
{
- "internalType": "enum LibNFTOrder.OrderStatus",
- "name": "status",
- "type": "uint8"
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
+ "type": "address"
},
{
"internalType": "uint128",
- "name": "orderAmount",
+ "name": "makerAmount",
"type": "uint128"
},
{
"internalType": "uint128",
- "name": "remainingAmount",
+ "name": "takerAmount",
"type": "uint128"
- }
- ],
- "internalType": "struct LibNFTOrder.OrderInfo",
- "name": "orderInfo",
- "type": "tuple"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
- "type": "uint8"
},
{
"internalType": "address",
@@ -4772,89 +4667,47 @@
"type": "address"
},
{
- "internalType": "uint256",
- "name": "expiry",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
+ "internalType": "address",
+ "name": "txOrigin",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "erc20TokenAmount",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
},
{
- "internalType": "contract IERC721Token",
- "name": "erc721Token",
- "type": "address"
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
},
{
"internalType": "uint256",
- "name": "erc721TokenId",
+ "name": "salt",
"type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc721TokenProperties",
- "type": "tuple[]"
}
],
- "internalType": "struct LibNFTOrder.ERC721Order",
+ "internalType": "struct LibNativeOrder.RfqOrder",
"name": "order",
"type": "tuple"
}
],
- "name": "getERC721OrderHash",
+ "name": "cancelRfqOrder",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "createTransformWallet",
"outputs": [
{
- "internalType": "bytes32",
- "name": "orderHash",
- "type": "bytes32"
+ "internalType": "contract IFlashWallet",
+ "name": "wallet",
+ "type": "address"
}
],
- "stateMutability": "view",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -4862,128 +4715,97 @@
{
"components": [
{
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
- "type": "uint8"
- },
- {
- "internalType": "address",
- "name": "maker",
+ "internalType": "address payable",
+ "name": "signer",
"type": "address"
},
{
"internalType": "address",
- "name": "taker",
+ "name": "sender",
"type": "address"
},
{
"internalType": "uint256",
- "name": "expiry",
+ "name": "minGasPrice",
"type": "uint256"
},
{
"internalType": "uint256",
- "name": "nonce",
+ "name": "maxGasPrice",
"type": "uint256"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
- "type": "address"
+ "internalType": "uint256",
+ "name": "expirationTimeSeconds",
+ "type": "uint256"
},
{
"internalType": "uint256",
- "name": "erc20TokenAmount",
+ "name": "salt",
"type": "uint256"
},
{
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
},
{
- "internalType": "contract IERC721Token",
- "name": "erc721Token",
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "feeToken",
"type": "address"
},
{
"internalType": "uint256",
- "name": "erc721TokenId",
+ "name": "feeAmount",
"type": "uint256"
- },
+ }
+ ],
+ "internalType": "struct IMetaTransactionsFeature.MetaTransactionData",
+ "name": "mtx",
+ "type": "tuple"
+ },
+ {
+ "components": [
{
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc721TokenProperties",
- "type": "tuple[]"
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
}
],
- "internalType": "struct LibNFTOrder.ERC721Order",
- "name": "order",
+ "internalType": "struct LibSignature.Signature",
+ "name": "signature",
"type": "tuple"
}
],
- "name": "getERC721OrderStatus",
- "outputs": [
- {
- "internalType": "enum LibNFTOrder.OrderStatus",
- "name": "status",
- "type": "uint8"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "uint248",
- "name": "nonceRange",
- "type": "uint248"
- }
- ],
- "name": "getERC721OrderStatusBitVector",
+ "name": "executeMetaTransaction",
"outputs": [
{
- "internalType": "uint256",
- "name": "bitVector",
- "type": "uint256"
+ "internalType": "bytes",
+ "name": "returnResult",
+ "type": "bytes"
}
],
- "stateMutability": "view",
+ "stateMutability": "payable",
"type": "function"
},
{
@@ -5054,17 +4876,54 @@
"internalType": "struct LibNativeOrder.LimitOrder",
"name": "order",
"type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "signature",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFillAmount",
+ "type": "uint128"
}
],
- "name": "getLimitOrderHash",
+ "name": "fillLimitOrder",
"outputs": [
{
- "internalType": "bytes32",
- "name": "orderHash",
- "type": "bytes32"
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "makerTokenFilledAmount",
+ "type": "uint128"
}
],
- "stateMutability": "view",
+ "stateMutability": "payable",
"type": "function"
},
{
@@ -5091,11 +4950,6 @@
"name": "takerAmount",
"type": "uint128"
},
- {
- "internalType": "uint128",
- "name": "takerTokenFeeAmount",
- "type": "uint128"
- },
{
"internalType": "address",
"name": "maker",
@@ -5108,12 +4962,7 @@
},
{
"internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "feeRecipient",
+ "name": "txOrigin",
"type": "address"
},
{
@@ -5132,37 +4981,52 @@
"type": "uint256"
}
],
- "internalType": "struct LibNativeOrder.LimitOrder",
+ "internalType": "struct LibNativeOrder.RfqOrder",
"name": "order",
"type": "tuple"
- }
- ],
- "name": "getLimitOrderInfo",
- "outputs": [
+ },
{
"components": [
{
- "internalType": "bytes32",
- "name": "orderHash",
- "type": "bytes32"
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
},
{
- "internalType": "enum LibNativeOrder.OrderStatus",
- "name": "status",
+ "internalType": "uint8",
+ "name": "v",
"type": "uint8"
},
{
- "internalType": "uint128",
- "name": "takerTokenFilledAmount",
- "type": "uint128"
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
}
],
- "internalType": "struct LibNativeOrder.OrderInfo",
- "name": "orderInfo",
+ "internalType": "struct LibSignature.Signature",
+ "name": "signature",
"type": "tuple"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFillAmount",
+ "type": "uint128"
}
],
- "stateMutability": "view",
+ "name": "fillOrKillRfqOrder",
+ "outputs": [
+ {
+ "internalType": "uint128",
+ "name": "makerTokenFilledAmount",
+ "type": "uint128"
+ }
+ ],
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -5189,11 +5053,6 @@
"name": "takerAmount",
"type": "uint128"
},
- {
- "internalType": "uint128",
- "name": "takerTokenFeeAmount",
- "type": "uint128"
- },
{
"internalType": "address",
"name": "maker",
@@ -5206,31 +5065,114 @@
},
{
"internalType": "address",
- "name": "sender",
+ "name": "txOrigin",
"type": "address"
},
{
- "internalType": "address",
- "name": "feeRecipient",
- "type": "address"
+ "internalType": "uint256",
+ "name": "expiryAndNonce",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct LibNativeOrder.OtcOrder",
+ "name": "order",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
},
{
"internalType": "bytes32",
- "name": "pool",
+ "name": "r",
"type": "bytes32"
},
{
- "internalType": "uint64",
- "name": "expiry",
- "type": "uint64"
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "makerSignature",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFillAmount",
+ "type": "uint128"
+ }
+ ],
+ "name": "fillOtcOrder",
+ "outputs": [
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "makerTokenFilledAmount",
+ "type": "uint128"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "txOrigin",
+ "type": "address"
},
{
"internalType": "uint256",
- "name": "salt",
+ "name": "expiryAndNonce",
"type": "uint256"
}
],
- "internalType": "struct LibNativeOrder.LimitOrder",
+ "internalType": "struct LibNativeOrder.OtcOrder",
"name": "order",
"type": "tuple"
},
@@ -5258,46 +5200,29 @@
}
],
"internalType": "struct LibSignature.Signature",
- "name": "signature",
+ "name": "makerSignature",
"type": "tuple"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFillAmount",
+ "type": "uint128"
}
],
- "name": "getLimitOrderRelevantState",
+ "name": "fillOtcOrderForEth",
"outputs": [
- {
- "components": [
- {
- "internalType": "bytes32",
- "name": "orderHash",
- "type": "bytes32"
- },
- {
- "internalType": "enum LibNativeOrder.OrderStatus",
- "name": "status",
- "type": "uint8"
- },
- {
- "internalType": "uint128",
- "name": "takerTokenFilledAmount",
- "type": "uint128"
- }
- ],
- "internalType": "struct LibNativeOrder.OrderInfo",
- "name": "orderInfo",
- "type": "tuple"
- },
{
"internalType": "uint128",
- "name": "actualFillableTakerTokenAmount",
+ "name": "takerTokenFilledAmount",
"type": "uint128"
},
{
- "internalType": "bool",
- "name": "isSignatureValid",
- "type": "bool"
+ "internalType": "uint128",
+ "name": "makerTokenFilledAmount",
+ "type": "uint128"
}
],
- "stateMutability": "view",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -5305,160 +5230,92 @@
{
"components": [
{
- "internalType": "address payable",
- "name": "signer",
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
"type": "address"
},
{
- "internalType": "address",
- "name": "sender",
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "minGasPrice",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "maxGasPrice",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "expirationTimeSeconds",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
},
{
- "internalType": "uint256",
- "name": "salt",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
},
{
- "internalType": "bytes",
- "name": "callData",
- "type": "bytes"
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
},
{
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "feeToken",
+ "internalType": "address",
+ "name": "txOrigin",
"type": "address"
},
{
"internalType": "uint256",
- "name": "feeAmount",
+ "name": "expiryAndNonce",
"type": "uint256"
}
],
- "internalType": "struct IMetaTransactionsFeature.MetaTransactionData",
- "name": "mtx",
+ "internalType": "struct LibNativeOrder.OtcOrder",
+ "name": "order",
"type": "tuple"
- }
- ],
- "name": "getMetaTransactionExecutedBlock",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "blockNumber",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
+ },
{
"components": [
{
- "internalType": "address payable",
- "name": "signer",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "minGasPrice",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "maxGasPrice",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "expirationTimeSeconds",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "salt",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "callData",
- "type": "bytes"
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
},
{
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "feeToken",
- "type": "address"
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
},
{
- "internalType": "uint256",
- "name": "feeAmount",
- "type": "uint256"
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
}
],
- "internalType": "struct IMetaTransactionsFeature.MetaTransactionData",
- "name": "mtx",
+ "internalType": "struct LibSignature.Signature",
+ "name": "makerSignature",
"type": "tuple"
}
],
- "name": "getMetaTransactionHash",
+ "name": "fillOtcOrderWithEth",
"outputs": [
{
- "internalType": "bytes32",
- "name": "mtxHash",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "mtxHash",
- "type": "bytes32"
- }
- ],
- "name": "getMetaTransactionHashExecutedBlock",
- "outputs": [
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
+ },
{
- "internalType": "uint256",
- "name": "blockNumber",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "makerTokenFilledAmount",
+ "type": "uint128"
}
],
- "stateMutability": "view",
+ "stateMutability": "payable",
"type": "function"
},
{
@@ -5500,26 +5357,73 @@
"name": "txOrigin",
"type": "address"
},
+ {
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
+ },
{
"internalType": "uint256",
- "name": "expiryAndNonce",
+ "name": "salt",
"type": "uint256"
}
],
- "internalType": "struct LibNativeOrder.OtcOrder",
+ "internalType": "struct LibNativeOrder.RfqOrder",
"name": "order",
"type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "signature",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFillAmount",
+ "type": "uint128"
}
],
- "name": "getOtcOrderHash",
+ "name": "fillRfqOrder",
"outputs": [
{
- "internalType": "bytes32",
- "name": "orderHash",
- "type": "bytes32"
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "makerTokenFilledAmount",
+ "type": "uint128"
}
],
- "stateMutability": "view",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -5570,55 +5474,65 @@
"internalType": "struct LibNativeOrder.OtcOrder",
"name": "order",
"type": "tuple"
- }
- ],
- "name": "getOtcOrderInfo",
- "outputs": [
+ },
{
"components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
{
"internalType": "bytes32",
- "name": "orderHash",
+ "name": "r",
"type": "bytes32"
},
{
- "internalType": "enum LibNativeOrder.OrderStatus",
- "name": "status",
- "type": "uint8"
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
}
],
- "internalType": "struct LibNativeOrder.OtcOrderInfo",
- "name": "orderInfo",
+ "internalType": "struct LibSignature.Signature",
+ "name": "makerSignature",
"type": "tuple"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getProtocolFeeMultiplier",
- "outputs": [
- {
- "internalType": "uint32",
- "name": "multiplier",
- "type": "uint32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getQuoteSigner",
- "outputs": [
+ },
{
- "internalType": "address",
- "name": "signer",
- "type": "address"
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "takerSignature",
+ "type": "tuple"
}
],
- "stateMutability": "view",
+ "name": "fillTakerSignedOtcOrder",
+ "outputs": [],
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -5660,36 +5574,74 @@
"name": "txOrigin",
"type": "address"
},
+ {
+ "internalType": "uint256",
+ "name": "expiryAndNonce",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct LibNativeOrder.OtcOrder",
+ "name": "order",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
{
"internalType": "bytes32",
- "name": "pool",
+ "name": "r",
"type": "bytes32"
},
{
- "internalType": "uint64",
- "name": "expiry",
- "type": "uint64"
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "makerSignature",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
},
{
- "internalType": "uint256",
- "name": "salt",
- "type": "uint256"
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
}
],
- "internalType": "struct LibNativeOrder.RfqOrder",
- "name": "order",
+ "internalType": "struct LibSignature.Signature",
+ "name": "takerSignature",
"type": "tuple"
}
],
- "name": "getRfqOrderHash",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "orderHash",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
+ "name": "fillTakerSignedOtcOrderForEth",
+ "outputs": [],
+ "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -5697,86 +5649,108 @@
{
"components": [
{
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
+ "internalType": "address",
+ "name": "maker",
"type": "address"
},
{
- "internalType": "uint128",
- "name": "makerAmount",
- "type": "uint128"
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
},
{
- "internalType": "uint128",
- "name": "takerAmount",
- "type": "uint128"
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
},
{
- "internalType": "address",
- "name": "maker",
- "type": "address"
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
},
{
- "internalType": "address",
- "name": "taker",
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20Token",
"type": "address"
},
{
- "internalType": "address",
- "name": "txOrigin",
- "type": "address"
+ "internalType": "uint256",
+ "name": "erc20TokenAmount",
+ "type": "uint256"
},
{
- "internalType": "bytes32",
- "name": "pool",
- "type": "bytes32"
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
},
{
- "internalType": "uint64",
- "name": "expiry",
- "type": "uint64"
+ "internalType": "contract IERC1155Token",
+ "name": "erc1155Token",
+ "type": "address"
},
{
"internalType": "uint256",
- "name": "salt",
+ "name": "erc1155TokenId",
"type": "uint256"
- }
- ],
- "internalType": "struct LibNativeOrder.RfqOrder",
- "name": "order",
- "type": "tuple"
- }
- ],
- "name": "getRfqOrderInfo",
- "outputs": [
- {
- "components": [
- {
- "internalType": "bytes32",
- "name": "orderHash",
- "type": "bytes32"
},
{
- "internalType": "enum LibNativeOrder.OrderStatus",
- "name": "status",
- "type": "uint8"
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc1155TokenProperties",
+ "type": "tuple[]"
},
{
"internalType": "uint128",
- "name": "takerTokenFilledAmount",
+ "name": "erc1155TokenAmount",
"type": "uint128"
}
],
- "internalType": "struct LibNativeOrder.OrderInfo",
- "name": "orderInfo",
+ "internalType": "struct LibNFTOrder.ERC1155Order",
+ "name": "order",
"type": "tuple"
}
],
+ "name": "getERC1155OrderHash",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "orderHash",
+ "type": "bytes32"
+ }
+ ],
"stateMutability": "view",
"type": "function"
},
@@ -5785,24 +5759,9 @@
{
"components": [
{
- "internalType": "contract IERC20TokenV06",
- "name": "makerToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "takerToken",
- "type": "address"
- },
- {
- "internalType": "uint128",
- "name": "makerAmount",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "takerAmount",
- "type": "uint128"
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
},
{
"internalType": "address",
@@ -5815,208 +5774,113 @@
"type": "address"
},
{
- "internalType": "address",
- "name": "txOrigin",
- "type": "address"
- },
- {
- "internalType": "bytes32",
- "name": "pool",
- "type": "bytes32"
- },
- {
- "internalType": "uint64",
+ "internalType": "uint256",
"name": "expiry",
- "type": "uint64"
+ "type": "uint256"
},
{
"internalType": "uint256",
- "name": "salt",
+ "name": "nonce",
"type": "uint256"
- }
- ],
- "internalType": "struct LibNativeOrder.RfqOrder",
- "name": "order",
- "type": "tuple"
- },
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
},
{
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature",
- "name": "signature",
- "type": "tuple"
- }
- ],
- "name": "getRfqOrderRelevantState",
- "outputs": [
- {
- "components": [
- {
- "internalType": "bytes32",
- "name": "orderHash",
- "type": "bytes32"
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20Token",
+ "type": "address"
},
{
- "internalType": "enum LibNativeOrder.OrderStatus",
- "name": "status",
- "type": "uint8"
+ "internalType": "uint256",
+ "name": "erc20TokenAmount",
+ "type": "uint256"
},
{
- "internalType": "uint128",
- "name": "takerTokenFilledAmount",
- "type": "uint128"
- }
- ],
- "internalType": "struct LibNativeOrder.OrderInfo",
- "name": "orderInfo",
- "type": "tuple"
- },
- {
- "internalType": "uint128",
- "name": "actualFillableTakerTokenAmount",
- "type": "uint128"
- },
- {
- "internalType": "bool",
- "name": "isSignatureValid",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes4",
- "name": "selector",
- "type": "bytes4"
- },
- {
- "internalType": "uint256",
- "name": "idx",
- "type": "uint256"
- }
- ],
- "name": "getRollbackEntryAtIndex",
- "outputs": [
- {
- "internalType": "address",
- "name": "impl",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes4",
- "name": "selector",
- "type": "bytes4"
- }
- ],
- "name": "getRollbackLength",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "rollbackLength",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getTransformWallet",
- "outputs": [
- {
- "internalType": "contract IFlashWallet",
- "name": "wallet",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getTransformerDeployer",
- "outputs": [
- {
- "internalType": "address",
- "name": "deployer",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "signer",
- "type": "address"
- }
- ],
- "name": "isValidOrderSigner",
- "outputs": [
- {
- "internalType": "bool",
- "name": "isAllowed",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "txOrigin",
- "type": "address"
- },
- {
- "internalType": "uint64",
- "name": "nonceBucket",
- "type": "uint64"
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "contract IERC1155Token",
+ "name": "erc1155Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc1155TokenId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc1155TokenProperties",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint128",
+ "name": "erc1155TokenAmount",
+ "type": "uint128"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.ERC1155Order",
+ "name": "order",
+ "type": "tuple"
}
],
- "name": "lastOtcTxOriginNonce",
+ "name": "getERC1155OrderInfo",
"outputs": [
{
- "internalType": "uint128",
- "name": "lastNonce",
- "type": "uint128"
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "orderHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "enum LibNFTOrder.OrderStatus",
+ "name": "status",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint128",
+ "name": "orderAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "remainingAmount",
+ "type": "uint128"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.OrderInfo",
+ "name": "orderInfo",
+ "type": "tuple"
}
],
"stateMutability": "view",
@@ -6112,9 +5976,23 @@
}
],
"internalType": "struct LibNFTOrder.ERC721Order",
- "name": "sellOrder",
+ "name": "order",
"type": "tuple"
- },
+ }
+ ],
+ "name": "getERC721OrderHash",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "orderHash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
{
"components": [
{
@@ -6203,465 +6081,380 @@
}
],
"internalType": "struct LibNFTOrder.ERC721Order",
- "name": "buyOrder",
- "type": "tuple"
- },
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature",
- "name": "sellOrderSignature",
- "type": "tuple"
- },
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature",
- "name": "buyOrderSignature",
+ "name": "order",
"type": "tuple"
}
],
- "name": "matchERC721Orders",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "profit",
- "type": "uint256"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "target",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
- },
- {
- "internalType": "address",
- "name": "newOwner",
- "type": "address"
- }
- ],
- "name": "migrate",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "outputToken",
- "type": "address"
- },
- {
- "components": [
- {
- "internalType": "enum IMultiplexFeature.MultiplexSubcall",
- "name": "id",
- "type": "uint8"
- },
- {
- "internalType": "uint256",
- "name": "sellAmount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
- }
- ],
- "internalType": "struct IMultiplexFeature.BatchSellSubcall[]",
- "name": "calls",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "minBuyAmount",
- "type": "uint256"
- }
- ],
- "name": "multiplexBatchSellEthForToken",
+ "name": "getERC721OrderStatus",
"outputs": [
{
- "internalType": "uint256",
- "name": "boughtAmount",
- "type": "uint256"
+ "internalType": "enum LibNFTOrder.OrderStatus",
+ "name": "status",
+ "type": "uint8"
}
],
- "stateMutability": "payable",
+ "stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
- "internalType": "contract IERC20TokenV06",
- "name": "inputToken",
- "type": "address"
- },
- {
- "components": [
- {
- "internalType": "enum IMultiplexFeature.MultiplexSubcall",
- "name": "id",
- "type": "uint8"
- },
- {
- "internalType": "uint256",
- "name": "sellAmount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
- }
- ],
- "internalType": "struct IMultiplexFeature.BatchSellSubcall[]",
- "name": "calls",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "sellAmount",
- "type": "uint256"
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
},
{
- "internalType": "uint256",
- "name": "minBuyAmount",
- "type": "uint256"
+ "internalType": "uint248",
+ "name": "nonceRange",
+ "type": "uint248"
}
],
- "name": "multiplexBatchSellTokenForEth",
+ "name": "getERC721OrderStatusBitVector",
"outputs": [
{
"internalType": "uint256",
- "name": "boughtAmount",
+ "name": "bitVector",
"type": "uint256"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
"inputs": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "inputToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "outputToken",
- "type": "address"
- },
{
"components": [
{
- "internalType": "enum IMultiplexFeature.MultiplexSubcall",
- "name": "id",
- "type": "uint8"
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
+ "type": "address"
},
{
- "internalType": "uint256",
- "name": "sellAmount",
- "type": "uint256"
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
+ "type": "address"
},
{
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFeeAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "feeRecipient",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
}
],
- "internalType": "struct IMultiplexFeature.BatchSellSubcall[]",
- "name": "calls",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "sellAmount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "minBuyAmount",
- "type": "uint256"
+ "internalType": "struct LibNativeOrder.LimitOrder",
+ "name": "order",
+ "type": "tuple"
}
],
- "name": "multiplexBatchSellTokenForToken",
+ "name": "getLimitOrderHash",
"outputs": [
{
- "internalType": "uint256",
- "name": "boughtAmount",
- "type": "uint256"
+ "internalType": "bytes32",
+ "name": "orderHash",
+ "type": "bytes32"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
"inputs": [
- {
- "internalType": "address[]",
- "name": "tokens",
- "type": "address[]"
- },
{
"components": [
{
- "internalType": "enum IMultiplexFeature.MultiplexSubcall",
- "name": "id",
- "type": "uint8"
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
+ "type": "address"
},
{
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFeeAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "feeRecipient",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
}
],
- "internalType": "struct IMultiplexFeature.MultiHopSellSubcall[]",
- "name": "calls",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "minBuyAmount",
- "type": "uint256"
+ "internalType": "struct LibNativeOrder.LimitOrder",
+ "name": "order",
+ "type": "tuple"
}
],
- "name": "multiplexMultiHopSellEthForToken",
+ "name": "getLimitOrderInfo",
"outputs": [
{
- "internalType": "uint256",
- "name": "boughtAmount",
- "type": "uint256"
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "orderHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "enum LibNativeOrder.OrderStatus",
+ "name": "status",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
+ }
+ ],
+ "internalType": "struct LibNativeOrder.OrderInfo",
+ "name": "orderInfo",
+ "type": "tuple"
}
],
- "stateMutability": "payable",
+ "stateMutability": "view",
"type": "function"
},
{
"inputs": [
- {
- "internalType": "address[]",
- "name": "tokens",
- "type": "address[]"
- },
{
"components": [
{
- "internalType": "enum IMultiplexFeature.MultiplexSubcall",
- "name": "id",
- "type": "uint8"
+ "internalType": "address payable",
+ "name": "signer",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minGasPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxGasPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expirationTimeSeconds",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
},
{
"internalType": "bytes",
- "name": "data",
+ "name": "callData",
"type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "feeToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "feeAmount",
+ "type": "uint256"
}
],
- "internalType": "struct IMultiplexFeature.MultiHopSellSubcall[]",
- "name": "calls",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "sellAmount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "minBuyAmount",
- "type": "uint256"
+ "internalType": "struct IMetaTransactionsFeature.MetaTransactionData",
+ "name": "mtx",
+ "type": "tuple"
}
],
- "name": "multiplexMultiHopSellTokenForEth",
+ "name": "getMetaTransactionExecutedBlock",
"outputs": [
{
"internalType": "uint256",
- "name": "boughtAmount",
+ "name": "blockNumber",
"type": "uint256"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
"inputs": [
- {
- "internalType": "address[]",
- "name": "tokens",
- "type": "address[]"
- },
{
"components": [
{
- "internalType": "enum IMultiplexFeature.MultiplexSubcall",
- "name": "id",
- "type": "uint8"
+ "internalType": "address payable",
+ "name": "signer",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minGasPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxGasPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expirationTimeSeconds",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
},
{
"internalType": "bytes",
- "name": "data",
+ "name": "callData",
"type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "feeToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "feeAmount",
+ "type": "uint256"
}
],
- "internalType": "struct IMultiplexFeature.MultiHopSellSubcall[]",
- "name": "calls",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "sellAmount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "minBuyAmount",
- "type": "uint256"
+ "internalType": "struct IMetaTransactionsFeature.MetaTransactionData",
+ "name": "mtx",
+ "type": "tuple"
}
],
- "name": "multiplexMultiHopSellTokenForToken",
+ "name": "getMetaTransactionHash",
"outputs": [
{
- "internalType": "uint256",
- "name": "boughtAmount",
- "type": "uint256"
+ "internalType": "bytes32",
+ "name": "mtxHash",
+ "type": "bytes32"
}
],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
- "internalType": "address",
- "name": "operator",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "from",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "tokenId",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
+ "internalType": "bytes32",
+ "name": "mtxHash",
+ "type": "bytes32"
}
],
- "name": "onERC1155Received",
+ "name": "getMetaTransactionHashExecutedBlock",
"outputs": [
- {
- "internalType": "bytes4",
- "name": "success",
- "type": "bytes4"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "operator",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "from",
- "type": "address"
- },
{
"internalType": "uint256",
- "name": "tokenId",
+ "name": "blockNumber",
"type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
- }
- ],
- "name": "onERC721Received",
- "outputs": [
- {
- "internalType": "bytes4",
- "name": "success",
- "type": "bytes4"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "owner",
- "outputs": [
- {
- "internalType": "address",
- "name": "ownerAddress",
- "type": "address"
}
],
"stateMutability": "view",
@@ -6671,104 +6464,61 @@
"inputs": [
{
"components": [
- {
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
- "type": "uint8"
- },
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "expiry",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
- },
{
"internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "erc20TokenAmount",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
- },
- {
- "internalType": "contract IERC1155Token",
- "name": "erc1155Token",
+ "name": "makerToken",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "erc1155TokenId",
- "type": "uint256"
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
+ "type": "address"
},
{
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc1155TokenProperties",
- "type": "tuple[]"
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
},
{
"internalType": "uint128",
- "name": "erc1155TokenAmount",
+ "name": "takerAmount",
"type": "uint128"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "txOrigin",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expiryAndNonce",
+ "type": "uint256"
}
],
- "internalType": "struct LibNFTOrder.ERC1155Order",
+ "internalType": "struct LibNativeOrder.OtcOrder",
"name": "order",
"type": "tuple"
}
],
- "name": "preSignERC1155Order",
- "outputs": [],
- "stateMutability": "nonpayable",
+ "name": "getOtcOrderHash",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "orderHash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
"type": "function"
},
{
@@ -6776,152 +6526,169 @@
{
"components": [
{
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
- "type": "uint8"
- },
- {
- "internalType": "address",
- "name": "maker",
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
"type": "address"
},
{
- "internalType": "address",
- "name": "taker",
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "expiry",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
},
{
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
+ "internalType": "address",
+ "name": "maker",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "erc20TokenAmount",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
},
{
- "internalType": "contract IERC721Token",
- "name": "erc721Token",
+ "internalType": "address",
+ "name": "txOrigin",
"type": "address"
},
{
"internalType": "uint256",
- "name": "erc721TokenId",
+ "name": "expiryAndNonce",
"type": "uint256"
+ }
+ ],
+ "internalType": "struct LibNativeOrder.OtcOrder",
+ "name": "order",
+ "type": "tuple"
+ }
+ ],
+ "name": "getOtcOrderInfo",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "orderHash",
+ "type": "bytes32"
},
{
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc721TokenProperties",
- "type": "tuple[]"
+ "internalType": "enum LibNativeOrder.OrderStatus",
+ "name": "status",
+ "type": "uint8"
}
],
- "internalType": "struct LibNFTOrder.ERC721Order",
- "name": "order",
+ "internalType": "struct LibNativeOrder.OtcOrderInfo",
+ "name": "orderInfo",
"type": "tuple"
}
],
- "name": "preSignERC721Order",
- "outputs": [],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "address",
- "name": "signer",
- "type": "address"
- },
+ "inputs": [],
+ "name": "getProtocolFeeMultiplier",
+ "outputs": [
{
- "internalType": "bool",
- "name": "allowed",
- "type": "bool"
+ "internalType": "uint32",
+ "name": "multiplier",
+ "type": "uint32"
}
],
- "name": "registerAllowedOrderSigner",
- "outputs": [],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "address[]",
- "name": "origins",
- "type": "address[]"
- },
+ "inputs": [],
+ "name": "getQuoteSigner",
+ "outputs": [
{
- "internalType": "bool",
- "name": "allowed",
- "type": "bool"
+ "internalType": "address",
+ "name": "signer",
+ "type": "address"
}
],
- "name": "registerAllowedRfqOrigins",
- "outputs": [],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
- "internalType": "bytes4",
- "name": "selector",
- "type": "bytes4"
- },
+ "components": [
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "txOrigin",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct LibNativeOrder.RfqOrder",
+ "name": "order",
+ "type": "tuple"
+ }
+ ],
+ "name": "getRfqOrderHash",
+ "outputs": [
{
- "internalType": "address",
- "name": "targetImpl",
- "type": "address"
+ "internalType": "bytes32",
+ "name": "orderHash",
+ "type": "bytes32"
}
],
- "name": "rollback",
- "outputs": [],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
@@ -6929,150 +6696,87 @@
{
"components": [
{
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
- "type": "uint8"
- },
- {
- "internalType": "address",
- "name": "maker",
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
"type": "address"
},
{
- "internalType": "address",
- "name": "taker",
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "expiry",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
},
{
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
+ "internalType": "address",
+ "name": "maker",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "erc20TokenAmount",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
},
{
- "internalType": "contract IERC1155Token",
- "name": "erc1155Token",
+ "internalType": "address",
+ "name": "txOrigin",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "erc1155TokenId",
- "type": "uint256"
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
},
{
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc1155TokenProperties",
- "type": "tuple[]"
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
},
{
- "internalType": "uint128",
- "name": "erc1155TokenAmount",
- "type": "uint128"
+ "internalType": "uint256",
+ "name": "salt",
+ "type": "uint256"
}
],
- "internalType": "struct LibNFTOrder.ERC1155Order",
- "name": "buyOrder",
+ "internalType": "struct LibNativeOrder.RfqOrder",
+ "name": "order",
"type": "tuple"
- },
+ }
+ ],
+ "name": "getRfqOrderInfo",
+ "outputs": [
{
"components": [
{
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
+ "internalType": "bytes32",
+ "name": "orderHash",
+ "type": "bytes32"
},
{
- "internalType": "uint8",
- "name": "v",
+ "internalType": "enum LibNativeOrder.OrderStatus",
+ "name": "status",
"type": "uint8"
},
{
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
}
],
- "internalType": "struct LibSignature.Signature",
- "name": "signature",
+ "internalType": "struct LibNativeOrder.OrderInfo",
+ "name": "orderInfo",
"type": "tuple"
- },
- {
- "internalType": "uint256",
- "name": "erc1155TokenId",
- "type": "uint256"
- },
- {
- "internalType": "uint128",
- "name": "erc1155SellAmount",
- "type": "uint128"
- },
- {
- "internalType": "bool",
- "name": "unwrapNativeToken",
- "type": "bool"
- },
- {
- "internalType": "bytes",
- "name": "callbackData",
- "type": "bytes"
}
],
- "name": "sellERC1155",
- "outputs": [],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
@@ -7080,92 +6784,58 @@
{
"components": [
{
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
- "type": "uint8"
+ "internalType": "contract IERC20TokenV06",
+ "name": "makerToken",
+ "type": "address"
},
{
- "internalType": "address",
- "name": "maker",
+ "internalType": "contract IERC20TokenV06",
+ "name": "takerToken",
"type": "address"
},
{
- "internalType": "address",
- "name": "taker",
- "type": "address"
+ "internalType": "uint128",
+ "name": "makerAmount",
+ "type": "uint128"
},
{
- "internalType": "uint256",
- "name": "expiry",
- "type": "uint256"
+ "internalType": "uint128",
+ "name": "takerAmount",
+ "type": "uint128"
},
{
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
+ "internalType": "address",
+ "name": "taker",
"type": "address"
},
{
- "internalType": "uint256",
- "name": "erc20TokenAmount",
- "type": "uint256"
+ "internalType": "address",
+ "name": "txOrigin",
+ "type": "address"
},
{
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
+ "internalType": "bytes32",
+ "name": "pool",
+ "type": "bytes32"
},
{
- "internalType": "contract IERC721Token",
- "name": "erc721Token",
- "type": "address"
+ "internalType": "uint64",
+ "name": "expiry",
+ "type": "uint64"
},
{
"internalType": "uint256",
- "name": "erc721TokenId",
+ "name": "salt",
"type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc721TokenProperties",
- "type": "tuple[]"
}
],
- "internalType": "struct LibNFTOrder.ERC721Order",
- "name": "buyOrder",
+ "internalType": "struct LibNativeOrder.RfqOrder",
+ "name": "order",
"type": "tuple"
},
{
@@ -7194,516 +6864,160 @@
"internalType": "struct LibSignature.Signature",
"name": "signature",
"type": "tuple"
- },
- {
- "internalType": "uint256",
- "name": "erc721TokenId",
- "type": "uint256"
- },
- {
- "internalType": "bool",
- "name": "unwrapNativeToken",
- "type": "bool"
- },
- {
- "internalType": "bytes",
- "name": "callbackData",
- "type": "bytes"
- }
- ],
- "name": "sellERC721",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes",
- "name": "encodedPath",
- "type": "bytes"
- },
- {
- "internalType": "uint256",
- "name": "minBuyAmount",
- "type": "uint256"
- },
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- }
- ],
- "name": "sellEthForTokenToUniswapV3",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "buyAmount",
- "type": "uint256"
- }
- ],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "inputToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "outputToken",
- "type": "address"
- },
- {
- "internalType": "contract ILiquidityProvider",
- "name": "provider",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "sellAmount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "minBuyAmount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "auxiliaryData",
- "type": "bytes"
- }
- ],
- "name": "sellToLiquidityProvider",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "boughtAmount",
- "type": "uint256"
- }
- ],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "contract IERC20TokenV06[]",
- "name": "tokens",
- "type": "address[]"
- },
- {
- "internalType": "uint256",
- "name": "sellAmount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "minBuyAmount",
- "type": "uint256"
- },
- {
- "internalType": "enum IPancakeSwapFeature.ProtocolFork",
- "name": "fork",
- "type": "uint8"
- }
- ],
- "name": "sellToPancakeSwap",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "buyAmount",
- "type": "uint256"
- }
- ],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "contract IERC20TokenV06[]",
- "name": "tokens",
- "type": "address[]"
- },
- {
- "internalType": "uint256",
- "name": "sellAmount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "minBuyAmount",
- "type": "uint256"
- },
- {
- "internalType": "bool",
- "name": "isSushi",
- "type": "bool"
- }
- ],
- "name": "sellToUniswap",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "buyAmount",
- "type": "uint256"
- }
- ],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes",
- "name": "encodedPath",
- "type": "bytes"
- },
- {
- "internalType": "uint256",
- "name": "sellAmount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "minBuyAmount",
- "type": "uint256"
- },
- {
- "internalType": "address payable",
- "name": "recipient",
- "type": "address"
- }
- ],
- "name": "sellTokenForEthToUniswapV3",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "buyAmount",
- "type": "uint256"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes",
- "name": "encodedPath",
- "type": "bytes"
- },
- {
- "internalType": "uint256",
- "name": "sellAmount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "minBuyAmount",
- "type": "uint256"
- },
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
}
],
- "name": "sellTokenForTokenToUniswapV3",
+ "name": "getRfqOrderRelevantState",
"outputs": [
{
- "internalType": "uint256",
- "name": "buyAmount",
- "type": "uint256"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "orderHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "enum LibNativeOrder.OrderStatus",
+ "name": "status",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint128",
+ "name": "takerTokenFilledAmount",
+ "type": "uint128"
+ }
+ ],
+ "internalType": "struct LibNativeOrder.OrderInfo",
+ "name": "orderInfo",
+ "type": "tuple"
+ },
{
- "internalType": "address",
- "name": "quoteSigner",
- "type": "address"
- }
- ],
- "name": "setQuoteSigner",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
+ "internalType": "uint128",
+ "name": "actualFillableTakerTokenAmount",
+ "type": "uint128"
+ },
{
- "internalType": "address",
- "name": "transformerDeployer",
- "type": "address"
+ "internalType": "bool",
+ "name": "isSignatureValid",
+ "type": "bool"
}
],
- "name": "setTransformerDeployer",
- "outputs": [],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
- "name": "interfaceId",
+ "name": "selector",
"type": "bytes4"
- }
- ],
- "name": "supportInterface",
- "outputs": [
+ },
{
- "internalType": "bool",
- "name": "isSupported",
- "type": "bool"
+ "internalType": "uint256",
+ "name": "idx",
+ "type": "uint256"
}
],
- "stateMutability": "pure",
- "type": "function"
- },
- {
- "inputs": [
+ "name": "getRollbackEntryAtIndex",
+ "outputs": [
{
"internalType": "address",
- "name": "newOwner",
+ "name": "impl",
"type": "address"
}
],
- "name": "transferOwnership",
- "outputs": [],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
- "internalType": "bytes32[]",
- "name": "poolIds",
- "type": "bytes32[]"
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4"
}
],
- "name": "transferProtocolFeesForPools",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "erc20",
- "type": "address"
- },
+ "name": "getRollbackLength",
+ "outputs": [
{
"internalType": "uint256",
- "name": "amountOut",
+ "name": "rollbackLength",
"type": "uint256"
- },
- {
- "internalType": "address payable",
- "name": "recipientWallet",
- "type": "address"
}
],
- "name": "transferTrappedTokensTo",
- "outputs": [],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "contract IERC20TokenV06",
- "name": "inputToken",
- "type": "address"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "outputToken",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "inputTokenAmount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "minOutputTokenAmount",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "uint32",
- "name": "deploymentNonce",
- "type": "uint32"
- },
- {
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
- }
- ],
- "internalType": "struct ITransformERC20Feature.Transformation[]",
- "name": "transformations",
- "type": "tuple[]"
- }
- ],
- "name": "transformERC20",
+ "inputs": [],
+ "name": "getTransformWallet",
"outputs": [
{
- "internalType": "uint256",
- "name": "outputTokenAmount",
- "type": "uint256"
+ "internalType": "contract IFlashWallet",
+ "name": "wallet",
+ "type": "address"
}
],
- "stateMutability": "payable",
+ "stateMutability": "view",
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "int256",
- "name": "amount0Delta",
- "type": "int256"
- },
- {
- "internalType": "int256",
- "name": "amount1Delta",
- "type": "int256"
- },
+ "inputs": [],
+ "name": "getTransformerDeployer",
+ "outputs": [
{
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
+ "internalType": "address",
+ "name": "deployer",
+ "type": "address"
}
],
- "name": "uniswapV3SwapCallback",
- "outputs": [],
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
- "components": [
- {
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
- "type": "uint8"
- },
- {
- "internalType": "address",
- "name": "maker",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "taker",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "expiry",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
- },
- {
- "internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "erc20TokenAmount",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
- },
- {
- "internalType": "contract IERC1155Token",
- "name": "erc1155Token",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "erc1155TokenId",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc1155TokenProperties",
- "type": "tuple[]"
- },
- {
- "internalType": "uint128",
- "name": "erc1155TokenAmount",
- "type": "uint128"
- }
- ],
- "internalType": "struct LibNFTOrder.ERC1155Order",
- "name": "order",
- "type": "tuple"
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
},
{
- "internalType": "uint256",
- "name": "erc1155TokenId",
- "type": "uint256"
+ "internalType": "address",
+ "name": "signer",
+ "type": "address"
+ }
+ ],
+ "name": "isValidOrderSigner",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "isAllowed",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "txOrigin",
+ "type": "address"
+ },
+ {
+ "internalType": "uint64",
+ "name": "nonceBucket",
+ "type": "uint64"
+ }
+ ],
+ "name": "lastOtcTxOriginNonce",
+ "outputs": [
+ {
+ "internalType": "uint128",
+ "name": "lastNonce",
+ "type": "uint128"
}
],
- "name": "validateERC1155OrderProperties",
- "outputs": [],
"stateMutability": "view",
"type": "function"
},
@@ -7769,13 +7083,13 @@
"type": "tuple[]"
},
{
- "internalType": "contract IERC1155Token",
- "name": "erc1155Token",
+ "internalType": "contract IERC721Token",
+ "name": "erc721Token",
"type": "address"
},
{
"internalType": "uint256",
- "name": "erc1155TokenId",
+ "name": "erc721TokenId",
"type": "uint256"
},
{
@@ -7792,54 +7106,14 @@
}
],
"internalType": "struct LibNFTOrder.Property[]",
- "name": "erc1155TokenProperties",
+ "name": "erc721TokenProperties",
"type": "tuple[]"
- },
- {
- "internalType": "uint128",
- "name": "erc1155TokenAmount",
- "type": "uint128"
}
],
- "internalType": "struct LibNFTOrder.ERC1155Order",
- "name": "order",
+ "internalType": "struct LibNFTOrder.ERC721Order",
+ "name": "sellOrder",
"type": "tuple"
},
- {
- "components": [
- {
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "internalType": "struct LibSignature.Signature",
- "name": "signature",
- "type": "tuple"
- }
- ],
- "name": "validateERC1155OrderSignature",
- "outputs": [],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
{
"components": [
{
@@ -7928,1129 +7202,1857 @@
}
],
"internalType": "struct LibNFTOrder.ERC721Order",
- "name": "order",
+ "name": "buyOrder",
"type": "tuple"
},
- {
- "internalType": "uint256",
- "name": "erc721TokenId",
- "type": "uint256"
- }
- ],
- "name": "validateERC721OrderProperties",
- "outputs": [],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
{
"components": [
{
- "internalType": "enum LibNFTOrder.TradeDirection",
- "name": "direction",
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
"type": "uint8"
},
{
- "internalType": "address",
- "name": "maker",
- "type": "address"
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
},
{
- "internalType": "address",
- "name": "taker",
- "type": "address"
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
},
{
- "internalType": "uint256",
- "name": "expiry",
- "type": "uint256"
- },
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "sellOrderSignature",
+ "type": "tuple"
+ },
+ {
+ "components": [
{
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
},
{
- "internalType": "contract IERC20TokenV06",
- "name": "erc20Token",
- "type": "address"
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
},
{
- "internalType": "uint256",
- "name": "erc20TokenAmount",
- "type": "uint256"
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
},
{
- "components": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "feeData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Fee[]",
- "name": "fees",
- "type": "tuple[]"
- },
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "buyOrderSignature",
+ "type": "tuple"
+ }
+ ],
+ "name": "matchERC721Orders",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "profit",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "migrate",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "outputToken",
+ "type": "address"
+ },
+ {
+ "components": [
{
- "internalType": "contract IERC721Token",
- "name": "erc721Token",
- "type": "address"
+ "internalType": "enum IMultiplexFeature.MultiplexSubcall",
+ "name": "id",
+ "type": "uint8"
},
{
"internalType": "uint256",
- "name": "erc721TokenId",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "contract IPropertyValidator",
- "name": "propertyValidator",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "propertyData",
- "type": "bytes"
- }
- ],
- "internalType": "struct LibNFTOrder.Property[]",
- "name": "erc721TokenProperties",
- "type": "tuple[]"
+ "name": "sellAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
}
],
- "internalType": "struct LibNFTOrder.ERC721Order",
- "name": "order",
- "type": "tuple"
+ "internalType": "struct IMultiplexFeature.BatchSellSubcall[]",
+ "name": "calls",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minBuyAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "multiplexBatchSellEthForToken",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "boughtAmount",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "inputToken",
+ "type": "address"
},
{
"components": [
{
- "internalType": "enum LibSignature.SignatureType",
- "name": "signatureType",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "v",
+ "internalType": "enum IMultiplexFeature.MultiplexSubcall",
+ "name": "id",
"type": "uint8"
},
{
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
+ "internalType": "uint256",
+ "name": "sellAmount",
+ "type": "uint256"
},
{
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
}
],
- "internalType": "struct LibSignature.Signature",
- "name": "signature",
- "type": "tuple"
- }
- ],
- "name": "validateERC721OrderSignature",
- "outputs": [],
- "stateMutability": "view",
- "type": "function"
- }
- ],
- "devdoc": {
- "details": "Interface for a fully featured Exchange Proxy.",
- "kind": "dev",
- "methods": {
- "_fillLimitOrder((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128,address,address)": {
- "details": "Fill a limit order. Internal variant. ETH protocol fees can be attached to this call. Any unspent ETH will be refunded to `msg.sender` (not `sender`).",
- "params": {
- "order": "The limit order.",
- "sender": "The order sender.",
- "signature": "The order signature.",
- "taker": "The order taker.",
- "takerTokenFillAmount": "Maximum taker token to fill this order with."
- },
- "returns": {
- "makerTokenFilledAmount": "How much maker token was filled.",
- "takerTokenFilledAmount": "How much maker token was filled."
- }
- },
- "_fillOtcOrder((address,address,uint128,uint128,address,address,address,uint256),(uint8,uint8,bytes32,bytes32),uint128,address,bool,address)": {
- "details": "Fill an OTC order for up to `takerTokenFillAmount` taker tokens. Internal variant.",
- "params": {
- "makerSignature": "The order signature from the maker.",
- "order": "The OTC order.",
- "recipient": "The recipient of the bought maker tokens.",
- "taker": "The address to fill the order in the context of.",
- "takerTokenFillAmount": "Maximum taker token amount to fill this order with.",
- "useSelfBalance": "Whether to use the Exchange Proxy's balance of input tokens."
- },
- "returns": {
- "makerTokenFilledAmount": "How much maker token was filled.",
- "takerTokenFilledAmount": "How much taker token was filled."
- }
- },
- "_fillRfqOrder((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128,address,bool,address)": {
- "details": "Fill an RFQ order. Internal variant.",
- "params": {
- "order": "The RFQ order.",
- "recipient": "The recipient of the maker tokens.",
- "signature": "The order signature.",
- "taker": "The order taker.",
- "takerTokenFillAmount": "Maximum taker token to fill this order with.",
- "useSelfBalance": "Whether to use the ExchangeProxy's transient balance of taker tokens to fill the order."
- },
- "returns": {
- "makerTokenFilledAmount": "How much maker token was filled.",
- "takerTokenFilledAmount": "How much maker token was filled."
- }
- },
- "_sellHeldTokenForTokenToUniswapV3(bytes,uint256,uint256,address)": {
- "details": "Sell a token for another token directly against uniswap v3. Private variant, uses tokens held by `address(this)`.",
- "params": {
- "encodedPath": "Uniswap-encoded path.",
- "minBuyAmount": "Minimum amount of the last token in the path to buy.",
- "recipient": "The recipient of the bought tokens. Can be zero for sender.",
- "sellAmount": "amount of the first token in the path to sell."
- },
- "returns": {
- "buyAmount": "Amount of the last token in the path bought."
- }
- },
- "_transformERC20((address,address,address,uint256,uint256,(uint32,bytes)[],bool,address))": {
- "details": "Internal version of `transformERC20()`. Only callable from within.",
- "params": {
- "args": "A `TransformERC20Args` struct."
- },
- "returns": {
- "outputTokenAmount": "The amount of `outputToken` received by the taker."
- }
- },
- "batchBuyERC1155s((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128)[],(uint8,uint8,bytes32,bytes32)[],uint128[],bytes[],bool)": {
- "details": "Buys multiple ERC1155 assets by filling the given orders.",
- "params": {
- "callbackData": "The data (if any) to pass to the taker callback for each order. Refer to the `callbackData` parameter to for `buyERC1155`.",
- "erc1155TokenAmounts": "The amounts of the ERC1155 assets to buy for each order.",
- "revertIfIncomplete": "If true, reverts if this function fails to fill any individual order.",
- "sellOrders": "The ERC1155 sell orders.",
- "signatures": "The order signatures."
- },
- "returns": {
- "successes": "An array of booleans corresponding to whether each order in `orders` was successfully filled."
- }
- },
- "batchBuyERC721s((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[])[],(uint8,uint8,bytes32,bytes32)[],bytes[],bool)": {
- "details": "Buys multiple ERC721 assets by filling the given orders.",
- "params": {
- "callbackData": "The data (if any) to pass to the taker callback for each order. Refer to the `callbackData` parameter to for `buyERC721`.",
- "revertIfIncomplete": "If true, reverts if this function fails to fill any individual order.",
- "sellOrders": "The ERC721 sell orders.",
- "signatures": "The order signatures."
- },
- "returns": {
- "successes": "An array of booleans corresponding to whether each order in `orders` was successfully filled."
- }
- },
- "batchCancelERC1155Orders(uint256[])": {
- "details": "Cancel multiple ERC1155 orders by their nonces. The caller should be the maker of the orders. Silently succeeds if an order with the same nonce has already been filled or cancelled.",
- "params": {
- "orderNonces": "The order nonces."
- }
- },
- "batchCancelERC721Orders(uint256[])": {
- "details": "Cancel multiple ERC721 orders by their nonces. The caller should be the maker of the orders. Silently succeeds if an order with the same nonce has already been filled or cancelled.",
- "params": {
- "orderNonces": "The order nonces."
- }
- },
- "batchCancelLimitOrders((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256)[])": {
- "details": "Cancel multiple limit orders. The caller must be the maker or a valid order signer. Silently succeeds if the order has already been cancelled.",
- "params": {
- "orders": "The limit orders."
- }
- },
- "batchCancelPairLimitOrders(address[],address[],uint256[])": {
- "details": "Cancel all limit orders for a given maker and pairs with salts less than the values provided. The caller must be the maker. Subsequent calls to this function with the same caller and pair require the new salt to be >= the old salt.",
- "params": {
- "makerTokens": "The maker tokens.",
- "minValidSalts": "The new minimum valid salts.",
- "takerTokens": "The taker tokens."
- }
- },
- "batchCancelPairLimitOrdersWithSigner(address,address[],address[],uint256[])": {
- "details": "Cancel all limit orders for a given maker and pairs with salts less than the values provided. The caller must be a signer registered to the maker. Subsequent calls to this function with the same maker and pair require the new salt to be >= the old salt.",
- "params": {
- "maker": "The maker for which to cancel.",
- "makerTokens": "The maker tokens.",
- "minValidSalts": "The new minimum valid salts.",
- "takerTokens": "The taker tokens."
- }
- },
- "batchCancelPairRfqOrders(address[],address[],uint256[])": {
- "details": "Cancel all RFQ orders for a given maker and pairs with salts less than the values provided. The caller must be the maker. Subsequent calls to this function with the same caller and pair require the new salt to be >= the old salt.",
- "params": {
- "makerTokens": "The maker tokens.",
- "minValidSalts": "The new minimum valid salts.",
- "takerTokens": "The taker tokens."
- }
- },
- "batchCancelPairRfqOrdersWithSigner(address,address[],address[],uint256[])": {
- "details": "Cancel all RFQ orders for a given maker and pairs with salts less than the values provided. The caller must be a signer registered to the maker. Subsequent calls to this function with the same maker and pair require the new salt to be >= the old salt.",
- "params": {
- "maker": "The maker for which to cancel.",
- "makerTokens": "The maker tokens.",
- "minValidSalts": "The new minimum valid salts.",
- "takerTokens": "The taker tokens."
- }
- },
- "batchCancelRfqOrders((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256)[])": {
- "details": "Cancel multiple RFQ orders. The caller must be the maker or a valid order signer. Silently succeeds if the order has already been cancelled.",
- "params": {
- "orders": "The RFQ orders."
- }
- },
- "batchExecuteMetaTransactions((address,address,uint256,uint256,uint256,uint256,bytes,uint256,address,uint256)[],(uint8,uint8,bytes32,bytes32)[])": {
- "details": "Execute multiple meta-transactions.",
- "params": {
- "mtxs": "The meta-transactions.",
- "signatures": "The signature by each respective `mtx.signer`."
- },
- "returns": {
- "returnResults": "The ABI-encoded results of the underlying calls."
- }
- },
- "batchFillLimitOrders((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256)[],(uint8,uint8,bytes32,bytes32)[],uint128[],bool)": {
- "details": "Fills multiple limit orders.",
- "params": {
- "orders": "Array of limit orders.",
- "revertIfIncomplete": "If true, reverts if this function fails to fill the full fill amount for any individual order.",
- "signatures": "Array of signatures corresponding to each order.",
- "takerTokenFillAmounts": "Array of desired amounts to fill each order."
+ "internalType": "struct IMultiplexFeature.BatchSellSubcall[]",
+ "name": "calls",
+ "type": "tuple[]"
},
- "returns": {
- "makerTokenFilledAmounts": "Array of amounts filled, in maker token.",
- "takerTokenFilledAmounts": "Array of amounts filled, in taker token."
- }
- },
- "batchFillRfqOrders((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256)[],(uint8,uint8,bytes32,bytes32)[],uint128[],bool)": {
- "details": "Fills multiple RFQ orders.",
- "params": {
- "orders": "Array of RFQ orders.",
- "revertIfIncomplete": "If true, reverts if this function fails to fill the full fill amount for any individual order.",
- "signatures": "Array of signatures corresponding to each order.",
- "takerTokenFillAmounts": "Array of desired amounts to fill each order."
+ {
+ "internalType": "uint256",
+ "name": "sellAmount",
+ "type": "uint256"
},
- "returns": {
- "makerTokenFilledAmounts": "Array of amounts filled, in maker token.",
- "takerTokenFilledAmounts": "Array of amounts filled, in taker token."
+ {
+ "internalType": "uint256",
+ "name": "minBuyAmount",
+ "type": "uint256"
}
- },
- "batchFillTakerSignedOtcOrders((address,address,uint128,uint128,address,address,address,uint256)[],(uint8,uint8,bytes32,bytes32)[],(uint8,uint8,bytes32,bytes32)[],bool[])": {
- "details": "Fills multiple taker-signed OTC orders.",
- "params": {
- "makerSignatures": "Array of maker signatures for each order.",
- "orders": "Array of OTC orders.",
- "takerSignatures": "Array of taker signatures for each order.",
- "unwrapWeth": "Array of booleans representing whether or not to unwrap bought WETH into ETH for each order. Should be set to false if the maker token is not WETH."
- },
- "returns": {
- "successes": "Array of booleans representing whether or not each order in `orders` was filled successfully."
+ ],
+ "name": "multiplexBatchSellTokenForEth",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "boughtAmount",
+ "type": "uint256"
}
- },
- "batchGetLimitOrderRelevantStates((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256)[],(uint8,uint8,bytes32,bytes32)[])": {
- "details": "Batch version of `getLimitOrderRelevantState()`, without reverting. Orders that would normally cause `getLimitOrderRelevantState()` to revert will have empty results.",
- "params": {
- "orders": "The limit orders.",
- "signatures": "The order signatures."
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "inputToken",
+ "type": "address"
},
- "returns": {
- "actualFillableTakerTokenAmounts": "How much of each order is fillable based on maker funds, in taker tokens.",
- "isSignatureValids": "Whether each signature is valid for the order.",
- "orderInfos": "Info about the orders."
- }
- },
- "batchGetRfqOrderRelevantStates((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256)[],(uint8,uint8,bytes32,bytes32)[])": {
- "details": "Batch version of `getRfqOrderRelevantState()`, without reverting. Orders that would normally cause `getRfqOrderRelevantState()` to revert will have empty results.",
- "params": {
- "orders": "The RFQ orders.",
- "signatures": "The order signatures."
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "outputToken",
+ "type": "address"
},
- "returns": {
- "actualFillableTakerTokenAmounts": "How much of each order is fillable based on maker funds, in taker tokens.",
- "isSignatureValids": "Whether each signature is valid for the order.",
- "orderInfos": "Info about the orders."
- }
- },
- "batchMatchERC721Orders((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[])[],(uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[])[],(uint8,uint8,bytes32,bytes32)[],(uint8,uint8,bytes32,bytes32)[])": {
- "details": "Matches pairs of complementary orders that have non-negative spreads. Each order is filled at their respective price, and the matcher receives a profit denominated in the ERC20 token.",
- "params": {
- "buyOrderSignatures": "Signatures for the buy orders.",
- "buyOrders": "Orders buying ERC721 assets.",
- "sellOrderSignatures": "Signatures for the sell orders.",
- "sellOrders": "Orders selling ERC721 assets."
+ {
+ "components": [
+ {
+ "internalType": "enum IMultiplexFeature.MultiplexSubcall",
+ "name": "id",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint256",
+ "name": "sellAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct IMultiplexFeature.BatchSellSubcall[]",
+ "name": "calls",
+ "type": "tuple[]"
},
- "returns": {
- "profits": "The amount of profit earned by the caller of this function for each pair of matched orders (denominated in the ERC20 token of the order pair).",
- "successes": "An array of booleans corresponding to whether each pair of orders was successfully matched."
- }
- },
- "buyERC1155((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128),(uint8,uint8,bytes32,bytes32),uint128,bytes)": {
- "details": "Buys an ERC1155 asset by filling the given order.",
- "params": {
- "callbackData": "If this parameter is non-zero, invokes `zeroExERC1155OrderCallback` on `msg.sender` after the ERC1155 asset has been transferred to `msg.sender` but before transferring the ERC20 tokens to the seller. Native tokens acquired during the callback can be used to fill the order.",
- "erc1155BuyAmount": "The amount of the ERC1155 asset to buy.",
- "sellOrder": "The ERC1155 sell order.",
- "signature": "The order signature."
- }
- },
- "buyERC721((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]),(uint8,uint8,bytes32,bytes32),bytes)": {
- "details": "Buys an ERC721 asset by filling the given order.",
- "params": {
- "callbackData": "If this parameter is non-zero, invokes `zeroExERC721OrderCallback` on `msg.sender` after the ERC721 asset has been transferred to `msg.sender` but before transferring the ERC20 tokens to the seller. Native tokens acquired during the callback can be used to fill the order.",
- "sellOrder": "The ERC721 sell order.",
- "signature": "The order signature."
- }
- },
- "cancelERC1155Order(uint256)": {
- "details": "Cancel a single ERC1155 order by its nonce. The caller should be the maker of the order. Silently succeeds if an order with the same nonce has already been filled or cancelled.",
- "params": {
- "orderNonce": "The order nonce."
- }
- },
- "cancelERC721Order(uint256)": {
- "details": "Cancel a single ERC721 order by its nonce. The caller should be the maker of the order. Silently succeeds if an order with the same nonce has already been filled or cancelled.",
- "params": {
- "orderNonce": "The order nonce."
+ {
+ "internalType": "uint256",
+ "name": "sellAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minBuyAmount",
+ "type": "uint256"
}
- },
- "cancelLimitOrder((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256))": {
- "details": "Cancel a single limit order. The caller must be the maker or a valid order signer. Silently succeeds if the order has already been cancelled.",
- "params": {
- "order": "The limit order."
+ ],
+ "name": "multiplexBatchSellTokenForToken",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "boughtAmount",
+ "type": "uint256"
}
- },
- "cancelPairLimitOrders(address,address,uint256)": {
- "details": "Cancel all limit orders for a given maker and pair with a salt less than the value provided. The caller must be the maker. Subsequent calls to this function with the same caller and pair require the new salt to be >= the old salt.",
- "params": {
- "makerToken": "The maker token.",
- "minValidSalt": "The new minimum valid salt.",
- "takerToken": "The taker token."
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "tokens",
+ "type": "address[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum IMultiplexFeature.MultiplexSubcall",
+ "name": "id",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct IMultiplexFeature.MultiHopSellSubcall[]",
+ "name": "calls",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minBuyAmount",
+ "type": "uint256"
}
- },
- "cancelPairLimitOrdersWithSigner(address,address,address,uint256)": {
- "details": "Cancel all limit orders for a given maker and pair with a salt less than the value provided. The caller must be a signer registered to the maker. Subsequent calls to this function with the same maker and pair require the new salt to be >= the old salt.",
- "params": {
- "maker": "The maker for which to cancel.",
- "makerToken": "The maker token.",
- "minValidSalt": "The new minimum valid salt.",
- "takerToken": "The taker token."
+ ],
+ "name": "multiplexMultiHopSellEthForToken",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "boughtAmount",
+ "type": "uint256"
}
- },
- "cancelPairRfqOrders(address,address,uint256)": {
- "details": "Cancel all RFQ orders for a given maker and pair with a salt less than the value provided. The caller must be the maker. Subsequent calls to this function with the same caller and pair require the new salt to be >= the old salt.",
- "params": {
- "makerToken": "The maker token.",
- "minValidSalt": "The new minimum valid salt.",
- "takerToken": "The taker token."
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "tokens",
+ "type": "address[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum IMultiplexFeature.MultiplexSubcall",
+ "name": "id",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct IMultiplexFeature.MultiHopSellSubcall[]",
+ "name": "calls",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "sellAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minBuyAmount",
+ "type": "uint256"
}
- },
- "cancelPairRfqOrdersWithSigner(address,address,address,uint256)": {
- "details": "Cancel all RFQ orders for a given maker and pair with a salt less than the value provided. The caller must be a signer registered to the maker. Subsequent calls to this function with the same maker and pair require the new salt to be >= the old salt.",
- "params": {
- "maker": "The maker for which to cancel.",
- "makerToken": "The maker token.",
- "minValidSalt": "The new minimum valid salt.",
- "takerToken": "The taker token."
+ ],
+ "name": "multiplexMultiHopSellTokenForEth",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "boughtAmount",
+ "type": "uint256"
}
- },
- "cancelRfqOrder((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256))": {
- "details": "Cancel a single RFQ order. The caller must be the maker or a valid order signer. Silently succeeds if the order has already been cancelled.",
- "params": {
- "order": "The RFQ order."
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "tokens",
+ "type": "address[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum IMultiplexFeature.MultiplexSubcall",
+ "name": "id",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct IMultiplexFeature.MultiHopSellSubcall[]",
+ "name": "calls",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "sellAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minBuyAmount",
+ "type": "uint256"
}
- },
- "createTransformWallet()": {
- "details": "Deploy a new flash wallet instance and replace the current one with it. Useful if we somehow break the current wallet instance. Only callable by the owner.",
- "returns": {
- "wallet": "The new wallet instance."
+ ],
+ "name": "multiplexMultiHopSellTokenForToken",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "boughtAmount",
+ "type": "uint256"
}
- },
- "executeMetaTransaction((address,address,uint256,uint256,uint256,uint256,bytes,uint256,address,uint256),(uint8,uint8,bytes32,bytes32))": {
- "details": "Execute a single meta-transaction.",
- "params": {
- "mtx": "The meta-transaction.",
- "signature": "The signature by `mtx.signer`."
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
},
- "returns": {
- "returnResult": "The ABI-encoded result of the underlying call."
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
}
- },
- "extend(bytes4,address)": {
- "details": "Register or replace a function.",
- "params": {
- "impl": "The implementation contract for the function.",
- "selector": "The function selector."
+ ],
+ "name": "onERC1155Received",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "success",
+ "type": "bytes4"
}
- },
- "fillLimitOrder((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": {
- "details": "Fill a limit order. The taker and sender will be the caller.",
- "params": {
- "order": "The limit order. ETH protocol fees can be attached to this call. Any unspent ETH will be refunded to the caller.",
- "signature": "The order signature.",
- "takerTokenFillAmount": "Maximum taker token amount to fill this order with."
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
},
- "returns": {
- "makerTokenFilledAmount": "How much maker token was filled.",
- "takerTokenFilledAmount": "How much maker token was filled."
- }
- },
- "fillOrKillLimitOrder((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": {
- "details": "Fill an RFQ order for exactly `takerTokenFillAmount` taker tokens. The taker will be the caller. ETH protocol fees can be attached to this call. Any unspent ETH will be refunded to the caller.",
- "params": {
- "order": "The limit order.",
- "signature": "The order signature.",
- "takerTokenFillAmount": "How much taker token to fill this order with."
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
},
- "returns": {
- "makerTokenFilledAmount": "How much maker token was filled."
- }
- },
- "fillOrKillRfqOrder((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": {
- "details": "Fill an RFQ order for exactly `takerTokenFillAmount` taker tokens. The taker will be the caller.",
- "params": {
- "order": "The RFQ order.",
- "signature": "The order signature.",
- "takerTokenFillAmount": "How much taker token to fill this order with."
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
},
- "returns": {
- "makerTokenFilledAmount": "How much maker token was filled."
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
}
- },
- "fillOtcOrder((address,address,uint128,uint128,address,address,address,uint256),(uint8,uint8,bytes32,bytes32),uint128)": {
- "details": "Fill an OTC order for up to `takerTokenFillAmount` taker tokens.",
- "params": {
- "makerSignature": "The order signature from the maker.",
- "order": "The OTC order.",
- "takerTokenFillAmount": "Maximum taker token amount to fill this order with."
- },
- "returns": {
- "makerTokenFilledAmount": "How much maker token was filled.",
- "takerTokenFilledAmount": "How much taker token was filled."
+ ],
+ "name": "onERC721Received",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "success",
+ "type": "bytes4"
}
- },
- "fillOtcOrderForEth((address,address,uint128,uint128,address,address,address,uint256),(uint8,uint8,bytes32,bytes32),uint128)": {
- "details": "Fill an OTC order for up to `takerTokenFillAmount` taker tokens. Unwraps bought WETH into ETH before sending it to the taker.",
- "params": {
- "makerSignature": "The order signature from the maker.",
- "order": "The OTC order.",
- "takerTokenFillAmount": "Maximum taker token amount to fill this order with."
- },
- "returns": {
- "makerTokenFilledAmount": "How much maker token was filled.",
- "takerTokenFilledAmount": "How much taker token was filled."
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc20TokenAmount",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "contract IERC1155Token",
+ "name": "erc1155Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc1155TokenId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc1155TokenProperties",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint128",
+ "name": "erc1155TokenAmount",
+ "type": "uint128"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.ERC1155Order",
+ "name": "order",
+ "type": "tuple"
}
- },
- "fillOtcOrderWithEth((address,address,uint128,uint128,address,address,address,uint256),(uint8,uint8,bytes32,bytes32))": {
- "details": "Fill an OTC order whose taker token is WETH for up to `msg.value`.",
- "params": {
- "makerSignature": "The order signature from the maker.",
- "order": "The OTC order."
- },
- "returns": {
- "makerTokenFilledAmount": "How much maker token was filled.",
- "takerTokenFilledAmount": "How much taker token was filled."
+ ],
+ "name": "preSignERC1155Order",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc20TokenAmount",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "contract IERC721Token",
+ "name": "erc721Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc721TokenProperties",
+ "type": "tuple[]"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.ERC721Order",
+ "name": "order",
+ "type": "tuple"
}
- },
- "fillRfqOrder((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": {
- "details": "Fill an RFQ order for up to `takerTokenFillAmount` taker tokens. The taker will be the caller.",
- "params": {
- "order": "The RFQ order.",
- "signature": "The order signature.",
- "takerTokenFillAmount": "Maximum taker token amount to fill this order with."
+ ],
+ "name": "preSignERC721Order",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "signer",
+ "type": "address"
},
- "returns": {
- "makerTokenFilledAmount": "How much maker token was filled.",
- "takerTokenFilledAmount": "How much maker token was filled."
- }
- },
- "fillTakerSignedOtcOrder((address,address,uint128,uint128,address,address,address,uint256),(uint8,uint8,bytes32,bytes32),(uint8,uint8,bytes32,bytes32))": {
- "details": "Fully fill an OTC order. \"Meta-transaction\" variant, requires order to be signed by both maker and taker.",
- "params": {
- "makerSignature": "The order signature from the maker.",
- "order": "The OTC order.",
- "takerSignature": "The order signature from the taker."
- }
- },
- "fillTakerSignedOtcOrderForEth((address,address,uint128,uint128,address,address,address,uint256),(uint8,uint8,bytes32,bytes32),(uint8,uint8,bytes32,bytes32))": {
- "details": "Fully fill an OTC order. \"Meta-transaction\" variant, requires order to be signed by both maker and taker. Unwraps bought WETH into ETH before sending it to the taker.",
- "params": {
- "makerSignature": "The order signature from the maker.",
- "order": "The OTC order.",
- "takerSignature": "The order signature from the taker."
+ {
+ "internalType": "bool",
+ "name": "allowed",
+ "type": "bool"
}
- },
- "getERC1155OrderHash((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128))": {
- "details": "Get the EIP-712 hash of an ERC1155 order.",
- "params": {
- "order": "The ERC1155 order."
+ ],
+ "name": "registerAllowedOrderSigner",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "origins",
+ "type": "address[]"
},
- "returns": {
- "orderHash": "The order hash."
+ {
+ "internalType": "bool",
+ "name": "allowed",
+ "type": "bool"
}
- },
- "getERC1155OrderInfo((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128))": {
- "details": "Get the order info for an ERC1155 order.",
- "params": {
- "order": "The ERC1155 order."
+ ],
+ "name": "registerAllowedRfqOrigins",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4"
},
- "returns": {
- "orderInfo": "Infor about the order."
+ {
+ "internalType": "address",
+ "name": "targetImpl",
+ "type": "address"
}
- },
- "getERC721OrderHash((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]))": {
- "details": "Get the EIP-712 hash of an ERC721 order.",
- "params": {
- "order": "The ERC721 order."
+ ],
+ "name": "rollback",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc20TokenAmount",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "contract IERC1155Token",
+ "name": "erc1155Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc1155TokenId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc1155TokenProperties",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint128",
+ "name": "erc1155TokenAmount",
+ "type": "uint128"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.ERC1155Order",
+ "name": "buyOrder",
+ "type": "tuple"
},
- "returns": {
- "orderHash": "The order hash."
- }
- },
- "getERC721OrderStatus((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]))": {
- "details": "Get the current status of an ERC721 order.",
- "params": {
- "order": "The ERC721 order."
+ {
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "signature",
+ "type": "tuple"
},
- "returns": {
- "status": "The status of the order."
- }
- },
- "getERC721OrderStatusBitVector(address,uint248)": {
- "details": "Get the order status bit vector for the given maker address and nonce range.",
- "params": {
- "maker": "The maker of the order.",
- "nonceRange": "Order status bit vectors are indexed by maker address and the upper 248 bits of the order nonce. We define `nonceRange` to be these 248 bits."
+ {
+ "internalType": "uint256",
+ "name": "erc1155TokenId",
+ "type": "uint256"
},
- "returns": {
- "bitVector": "The order status bit vector for the given maker and nonce range."
- }
- },
- "getLimitOrderHash((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256))": {
- "details": "Get the canonical hash of a limit order.",
- "params": {
- "order": "The limit order."
+ {
+ "internalType": "uint128",
+ "name": "erc1155SellAmount",
+ "type": "uint128"
},
- "returns": {
- "orderHash": "The order hash."
- }
- },
- "getLimitOrderInfo((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256))": {
- "details": "Get the order info for a limit order.",
- "params": {
- "order": "The limit order."
+ {
+ "internalType": "bool",
+ "name": "unwrapNativeToken",
+ "type": "bool"
},
- "returns": {
- "orderInfo": "Info about the order."
+ {
+ "internalType": "bytes",
+ "name": "callbackData",
+ "type": "bytes"
}
- },
- "getLimitOrderRelevantState((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32))": {
- "details": "Get order info, fillable amount, and signature validity for a limit order. Fillable amount is determined using balances and allowances of the maker.",
- "params": {
- "order": "The limit order.",
- "signature": "The order signature."
+ ],
+ "name": "sellERC1155",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc20TokenAmount",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "contract IERC721Token",
+ "name": "erc721Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc721TokenProperties",
+ "type": "tuple[]"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.ERC721Order",
+ "name": "buyOrder",
+ "type": "tuple"
},
- "returns": {
- "actualFillableTakerTokenAmount": "How much of the order is fillable based on maker funds, in taker tokens.",
- "isSignatureValid": "Whether the signature is valid.",
- "orderInfo": "Info about the order."
- }
- },
- "getMetaTransactionExecutedBlock((address,address,uint256,uint256,uint256,uint256,bytes,uint256,address,uint256))": {
- "details": "Get the block at which a meta-transaction has been executed.",
- "params": {
- "mtx": "The meta-transaction."
+ {
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "signature",
+ "type": "tuple"
},
- "returns": {
- "blockNumber": "The block height when the meta-transactioin was executed."
- }
- },
- "getMetaTransactionHash((address,address,uint256,uint256,uint256,uint256,bytes,uint256,address,uint256))": {
- "details": "Get the EIP712 hash of a meta-transaction.",
- "params": {
- "mtx": "The meta-transaction."
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
},
- "returns": {
- "mtxHash": "The EIP712 hash of `mtx`."
- }
- },
- "getMetaTransactionHashExecutedBlock(bytes32)": {
- "details": "Get the block at which a meta-transaction hash has been executed.",
- "params": {
- "mtxHash": "The meta-transaction hash."
+ {
+ "internalType": "bool",
+ "name": "unwrapNativeToken",
+ "type": "bool"
},
- "returns": {
- "blockNumber": "The block height when the meta-transactioin was executed."
+ {
+ "internalType": "bytes",
+ "name": "callbackData",
+ "type": "bytes"
}
- },
- "getOtcOrderHash((address,address,uint128,uint128,address,address,address,uint256))": {
- "details": "Get the canonical hash of an OTC order.",
- "params": {
- "order": "The OTC order."
+ ],
+ "name": "sellERC721",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "encodedPath",
+ "type": "bytes"
},
- "returns": {
- "orderHash": "The order hash."
- }
- },
- "getOtcOrderInfo((address,address,uint128,uint128,address,address,address,uint256))": {
- "details": "Get the order info for an OTC order.",
- "params": {
- "order": "The OTC order."
+ {
+ "internalType": "uint256",
+ "name": "minBuyAmount",
+ "type": "uint256"
},
- "returns": {
- "orderInfo": "Info about the order."
- }
- },
- "getProtocolFeeMultiplier()": {
- "details": "Get the protocol fee multiplier. This should be multiplied by the gas price to arrive at the required protocol fee to fill a native order.",
- "returns": {
- "multiplier": "The protocol fee multiplier."
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
}
- },
- "getQuoteSigner()": {
- "details": "Return the optional signer for `transformERC20()` calldata.",
- "returns": {
- "signer": "The transform deployer address."
+ ],
+ "name": "sellEthForTokenToUniswapV3",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "buyAmount",
+ "type": "uint256"
}
- },
- "getRfqOrderHash((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256))": {
- "details": "Get the canonical hash of an RFQ order.",
- "params": {
- "order": "The RFQ order."
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "inputToken",
+ "type": "address"
},
- "returns": {
- "orderHash": "The order hash."
- }
- },
- "getRfqOrderInfo((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256))": {
- "details": "Get the order info for an RFQ order.",
- "params": {
- "order": "The RFQ order."
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "outputToken",
+ "type": "address"
},
- "returns": {
- "orderInfo": "Info about the order."
- }
- },
- "getRfqOrderRelevantState((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32))": {
- "details": "Get order info, fillable amount, and signature validity for an RFQ order. Fillable amount is determined using balances and allowances of the maker.",
- "params": {
- "order": "The RFQ order.",
- "signature": "The order signature."
+ {
+ "internalType": "contract ILiquidityProvider",
+ "name": "provider",
+ "type": "address"
},
- "returns": {
- "actualFillableTakerTokenAmount": "How much of the order is fillable based on maker funds, in taker tokens.",
- "isSignatureValid": "Whether the signature is valid.",
- "orderInfo": "Info about the order."
- }
- },
- "getRollbackEntryAtIndex(bytes4,uint256)": {
- "details": "Retrieve an entry in the rollback history for a function.",
- "params": {
- "idx": "The index in the rollback history.",
- "selector": "The function selector."
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
},
- "returns": {
- "impl": "An implementation address for the function at index `idx`."
- }
- },
- "getRollbackLength(bytes4)": {
- "details": "Retrieve the length of the rollback history for a function.",
- "params": {
- "selector": "The function selector."
+ {
+ "internalType": "uint256",
+ "name": "sellAmount",
+ "type": "uint256"
},
- "returns": {
- "rollbackLength": "The number of items in the rollback history for the function."
- }
- },
- "getTransformWallet()": {
- "details": "Return the current wallet instance that will serve as the execution context for transformations.",
- "returns": {
- "wallet": "The wallet instance."
- }
- },
- "getTransformerDeployer()": {
- "details": "Return the allowed deployer for transformers.",
- "returns": {
- "deployer": "The transform deployer address."
+ {
+ "internalType": "uint256",
+ "name": "minBuyAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "auxiliaryData",
+ "type": "bytes"
}
- },
- "isValidOrderSigner(address,address)": {
- "details": "checks if a given address is registered to sign on behalf of a maker address",
- "params": {
- "maker": "The maker address encoded in an order (can be a contract)",
- "signer": "The address that is providing a signature"
+ ],
+ "name": "sellToLiquidityProvider",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "boughtAmount",
+ "type": "uint256"
}
- },
- "lastOtcTxOriginNonce(address,uint64)": {
- "details": "Get the last nonce used for a particular tx.origin address and nonce bucket.",
- "params": {
- "nonceBucket": "The nonce bucket index.",
- "txOrigin": "The address."
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20TokenV06[]",
+ "name": "tokens",
+ "type": "address[]"
},
- "returns": {
- "lastNonce": "The last nonce value used."
- }
- },
- "matchERC721Orders((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]),(uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]),(uint8,uint8,bytes32,bytes32),(uint8,uint8,bytes32,bytes32))": {
- "details": "Matches a pair of complementary orders that have a non-negative spread. Each order is filled at their respective price, and the matcher receives a profit denominated in the ERC20 token.",
- "params": {
- "buyOrder": "Order buying an ERC721 asset.",
- "buyOrderSignature": "Signature for the buy order.",
- "sellOrder": "Order selling an ERC721 asset.",
- "sellOrderSignature": "Signature for the sell order."
+ {
+ "internalType": "uint256",
+ "name": "sellAmount",
+ "type": "uint256"
},
- "returns": {
- "profit": "The amount of profit earned by the caller of this function (denominated in the ERC20 token of the matched orders)."
+ {
+ "internalType": "uint256",
+ "name": "minBuyAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "enum IPancakeSwapFeature.ProtocolFork",
+ "name": "fork",
+ "type": "uint8"
}
- },
- "migrate(address,bytes,address)": {
- "details": "Execute a migration function in the context of the ZeroEx contract. The result of the function being called should be the magic bytes 0x2c64c5ef (`keccack('MIGRATE_SUCCESS')`). Only callable by the owner. The owner will be temporarily set to `address(this)` inside the call. Before returning, the owner will be set to `newOwner`.",
- "params": {
- "data": "The call data.",
- "newOwner": "The address of the new owner.",
- "target": "The migrator contract address."
+ ],
+ "name": "sellToPancakeSwap",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "buyAmount",
+ "type": "uint256"
}
- },
- "multiplexBatchSellEthForToken(address,(uint8,uint256,bytes)[],uint256)": {
- "details": "Sells attached ETH for `outputToken` using the provided calls.",
- "params": {
- "calls": "The calls to use to sell the attached ETH.",
- "minBuyAmount": "The minimum amount of `outputToken` that must be bought for this function to not revert.",
- "outputToken": "The token to buy."
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20TokenV06[]",
+ "name": "tokens",
+ "type": "address[]"
},
- "returns": {
- "boughtAmount": "The amount of `outputToken` bought."
- }
- },
- "multiplexBatchSellTokenForEth(address,(uint8,uint256,bytes)[],uint256,uint256)": {
- "details": "Sells `sellAmount` of the given `inputToken` for ETH using the provided calls.",
- "params": {
- "calls": "The calls to use to sell the input tokens.",
- "inputToken": "The token to sell.",
- "minBuyAmount": "The minimum amount of ETH that must be bought for this function to not revert.",
- "sellAmount": "The amount of `inputToken` to sell."
+ {
+ "internalType": "uint256",
+ "name": "sellAmount",
+ "type": "uint256"
},
- "returns": {
- "boughtAmount": "The amount of ETH bought."
- }
- },
- "multiplexBatchSellTokenForToken(address,address,(uint8,uint256,bytes)[],uint256,uint256)": {
- "details": "Sells `sellAmount` of the given `inputToken` for `outputToken` using the provided calls.",
- "params": {
- "calls": "The calls to use to sell the input tokens.",
- "inputToken": "The token to sell.",
- "minBuyAmount": "The minimum amount of `outputToken` that must be bought for this function to not revert.",
- "outputToken": "The token to buy.",
- "sellAmount": "The amount of `inputToken` to sell."
+ {
+ "internalType": "uint256",
+ "name": "minBuyAmount",
+ "type": "uint256"
},
- "returns": {
- "boughtAmount": "The amount of `outputToken` bought."
+ {
+ "internalType": "bool",
+ "name": "isSushi",
+ "type": "bool"
}
- },
- "multiplexMultiHopSellEthForToken(address[],(uint8,bytes)[],uint256)": {
- "details": "Sells attached ETH via the given sequence of tokens and calls. `tokens[0]` must be WETH. The last token in `tokens` is the output token that will ultimately be sent to `msg.sender`",
- "params": {
- "calls": "The sequence of calls to use for the sell.",
- "minBuyAmount": "The minimum amount of output tokens that must be bought for this function to not revert.",
- "tokens": "The sequence of tokens to use for the sell, i.e. `tokens[i]` will be sold for `tokens[i+1]` via `calls[i]`."
- },
- "returns": {
- "boughtAmount": "The amount of output tokens bought."
+ ],
+ "name": "sellToUniswap",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "buyAmount",
+ "type": "uint256"
}
- },
- "multiplexMultiHopSellTokenForEth(address[],(uint8,bytes)[],uint256,uint256)": {
- "details": "Sells `sellAmount` of the input token (`tokens[0]`) for ETH via the given sequence of tokens and calls. The last token in `tokens` must be WETH.",
- "params": {
- "calls": "The sequence of calls to use for the sell.",
- "minBuyAmount": "The minimum amount of ETH that must be bought for this function to not revert.",
- "tokens": "The sequence of tokens to use for the sell, i.e. `tokens[i]` will be sold for `tokens[i+1]` via `calls[i]`."
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "encodedPath",
+ "type": "bytes"
},
- "returns": {
- "boughtAmount": "The amount of ETH bought."
- }
- },
- "multiplexMultiHopSellTokenForToken(address[],(uint8,bytes)[],uint256,uint256)": {
- "details": "Sells `sellAmount` of the input token (`tokens[0]`) via the given sequence of tokens and calls. The last token in `tokens` is the output token that will ultimately be sent to `msg.sender`",
- "params": {
- "calls": "The sequence of calls to use for the sell.",
- "minBuyAmount": "The minimum amount of output tokens that must be bought for this function to not revert.",
- "tokens": "The sequence of tokens to use for the sell, i.e. `tokens[i]` will be sold for `tokens[i+1]` via `calls[i]`."
+ {
+ "internalType": "uint256",
+ "name": "sellAmount",
+ "type": "uint256"
},
- "returns": {
- "boughtAmount": "The amount of output tokens bought."
- }
- },
- "onERC1155Received(address,address,uint256,uint256,bytes)": {
- "details": "Callback for the ERC1155 `safeTransferFrom` function. This callback can be used to sell an ERC1155 asset if a valid ERC1155 order, signature and `unwrapNativeToken` are encoded in `data`. This allows takers to sell their ERC1155 asset without first calling `setApprovalForAll`.",
- "params": {
- "data": "Additional data with no specified format. If a valid ERC1155 order, signature and `unwrapNativeToken` are encoded in `data`, this function will try to fill the order using the received asset.",
- "from": "The address which previously owned the token.",
- "operator": "The address which called `safeTransferFrom`.",
- "tokenId": "The ID of the asset being transferred.",
- "value": "The amount being transferred."
+ {
+ "internalType": "uint256",
+ "name": "minBuyAmount",
+ "type": "uint256"
},
- "returns": {
- "success": "The selector of this function (0xf23a6e61), indicating that the callback succeeded."
+ {
+ "internalType": "address payable",
+ "name": "recipient",
+ "type": "address"
}
- },
- "onERC721Received(address,address,uint256,bytes)": {
- "details": "Callback for the ERC721 `safeTransferFrom` function. This callback can be used to sell an ERC721 asset if a valid ERC721 order, signature and `unwrapNativeToken` are encoded in `data`. This allows takers to sell their ERC721 asset without first calling `setApprovalForAll`.",
- "params": {
- "data": "Additional data with no specified format. If a valid ERC721 order, signature and `unwrapNativeToken` are encoded in `data`, this function will try to fill the order using the received asset.",
- "from": "The address which previously owned the token.",
- "operator": "The address which called `safeTransferFrom`.",
- "tokenId": "The ID of the asset being transferred."
- },
- "returns": {
- "success": "The selector of this function (0x150b7a02), indicating that the callback succeeded."
+ ],
+ "name": "sellTokenForEthToUniswapV3",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "buyAmount",
+ "type": "uint256"
}
- },
- "owner()": {
- "details": "The owner of this contract.",
- "returns": {
- "ownerAddress": "The owner address."
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "encodedPath",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "sellAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minBuyAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
}
- },
- "preSignERC1155Order((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128))": {
- "details": "Approves an ERC1155 order on-chain. After pre-signing the order, the `PRESIGNED` signature type will become valid for that order and signer.",
- "params": {
- "order": "An ERC1155 order."
+ ],
+ "name": "sellTokenForTokenToUniswapV3",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "buyAmount",
+ "type": "uint256"
}
- },
- "preSignERC721Order((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]))": {
- "details": "Approves an ERC721 order on-chain. After pre-signing the order, the `PRESIGNED` signature type will become valid for that order and signer.",
- "params": {
- "order": "An ERC721 order."
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "quoteSigner",
+ "type": "address"
}
- },
- "registerAllowedOrderSigner(address,bool)": {
- "details": "Register a signer who can sign on behalf of msg.sender This allows one to sign on behalf of a contract that calls this function",
- "params": {
- "allowed": "True to register, false to unregister.",
- "signer": "The address from which you plan to generate signatures"
+ ],
+ "name": "setQuoteSigner",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "transformerDeployer",
+ "type": "address"
}
- },
- "registerAllowedRfqOrigins(address[],bool)": {
- "details": "Mark what tx.origin addresses are allowed to fill an order that specifies the message sender as its txOrigin.",
- "params": {
- "allowed": "True to register, false to unregister.",
- "origins": "An array of origin addresses to update."
+ ],
+ "name": "setTransformerDeployer",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
}
- },
- "rollback(bytes4,address)": {
- "details": "Roll back to a prior implementation of a function.",
- "params": {
- "selector": "The function selector.",
- "targetImpl": "The address of an older implementation of the function."
+ ],
+ "name": "supportInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "isSupported",
+ "type": "bool"
}
- },
- "sellERC1155((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128),(uint8,uint8,bytes32,bytes32),uint256,uint128,bool,bytes)": {
- "details": "Sells an ERC1155 asset to fill the given order.",
- "params": {
- "buyOrder": "The ERC1155 buy order.",
- "callbackData": "If this parameter is non-zero, invokes `zeroExERC1155OrderCallback` on `msg.sender` after the ERC20 tokens have been transferred to `msg.sender` but before transferring the ERC1155 asset to the buyer.",
- "erc1155SellAmount": "The amount of the ERC1155 asset to sell.",
- "erc1155TokenId": "The ID of the ERC1155 asset being sold. If the given order specifies properties, the asset must satisfy those properties. Otherwise, it must equal the tokenId in the order.",
- "signature": "The order signature from the maker.",
- "unwrapNativeToken": "If this parameter is true and the ERC20 token of the order is e.g. WETH, unwraps the token before transferring it to the taker."
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
}
- },
- "sellERC721((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]),(uint8,uint8,bytes32,bytes32),uint256,bool,bytes)": {
- "details": "Sells an ERC721 asset to fill the given order.",
- "params": {
- "buyOrder": "The ERC721 buy order.",
- "callbackData": "If this parameter is non-zero, invokes `zeroExERC721OrderCallback` on `msg.sender` after the ERC20 tokens have been transferred to `msg.sender` but before transferring the ERC721 asset to the buyer.",
- "erc721TokenId": "The ID of the ERC721 asset being sold. If the given order specifies properties, the asset must satisfy those properties. Otherwise, it must equal the tokenId in the order.",
- "signature": "The order signature from the maker.",
- "unwrapNativeToken": "If this parameter is true and the ERC20 token of the order is e.g. WETH, unwraps the token before transferring it to the taker."
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32[]",
+ "name": "poolIds",
+ "type": "bytes32[]"
}
- },
- "sellEthForTokenToUniswapV3(bytes,uint256,address)": {
- "details": "Sell attached ETH directly against uniswap v3.",
- "params": {
- "encodedPath": "Uniswap-encoded path, where the first token is WETH.",
- "minBuyAmount": "Minimum amount of the last token in the path to buy.",
- "recipient": "The recipient of the bought tokens. Can be zero for sender."
+ ],
+ "name": "transferProtocolFeesForPools",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20",
+ "type": "address"
},
- "returns": {
- "buyAmount": "Amount of the last token in the path bought."
- }
- },
- "sellToLiquidityProvider(address,address,address,address,uint256,uint256,bytes)": {
- "details": "Sells `sellAmount` of `inputToken` to the liquidity provider at the given `provider` address.",
- "params": {
- "auxiliaryData": "Auxiliary data supplied to the `provider` contract.",
- "inputToken": "The token being sold.",
- "minBuyAmount": "The minimum acceptable amount of `outputToken` to buy. Reverts if this amount is not satisfied.",
- "outputToken": "The token being bought.",
- "provider": "The address of the on-chain liquidity provider to trade with.",
- "recipient": "The recipient of the bought tokens. If equal to address(0), `msg.sender` is assumed to be the recipient.",
- "sellAmount": "The amount of `inputToken` to sell."
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
},
- "returns": {
- "boughtAmount": "The amount of `outputToken` bought."
+ {
+ "internalType": "address payable",
+ "name": "recipientWallet",
+ "type": "address"
}
- },
- "sellToPancakeSwap(address[],uint256,uint256,uint8)": {
- "details": "Efficiently sell directly to PancakeSwap (and forks).",
- "params": {
- "fork": "The protocol fork to use.",
- "minBuyAmount": "Minimum amount of `tokens[-1]` to buy.",
- "sellAmount": "of `tokens[0]` Amount to sell.",
- "tokens": "Sell path."
+ ],
+ "name": "transferTrappedTokensTo",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "inputToken",
+ "type": "address"
},
- "returns": {
- "buyAmount": "Amount of `tokens[-1]` bought."
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "outputToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "inputTokenAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minOutputTokenAmount",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint32",
+ "name": "deploymentNonce",
+ "type": "uint32"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct ITransformERC20Feature.Transformation[]",
+ "name": "transformations",
+ "type": "tuple[]"
}
- },
- "sellToUniswap(address[],uint256,uint256,bool)": {
- "details": "Efficiently sell directly to uniswap/sushiswap.",
- "params": {
- "isSushi": "Use sushiswap if true.",
- "minBuyAmount": "Minimum amount of `tokens[-1]` to buy.",
- "sellAmount": "of `tokens[0]` Amount to sell.",
- "tokens": "Sell path."
+ ],
+ "name": "transformERC20",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "outputTokenAmount",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "int256",
+ "name": "amount0Delta",
+ "type": "int256"
},
- "returns": {
- "buyAmount": "Amount of `tokens[-1]` bought."
+ {
+ "internalType": "int256",
+ "name": "amount1Delta",
+ "type": "int256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
}
- },
- "sellTokenForEthToUniswapV3(bytes,uint256,uint256,address)": {
- "details": "Sell a token for ETH directly against uniswap v3.",
- "params": {
- "encodedPath": "Uniswap-encoded path, where the last token is WETH.",
- "minBuyAmount": "Minimum amount of ETH to buy.",
- "recipient": "The recipient of the bought tokens. Can be zero for sender.",
- "sellAmount": "amount of the first token in the path to sell."
+ ],
+ "name": "uniswapV3SwapCallback",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc20TokenAmount",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "contract IERC1155Token",
+ "name": "erc1155Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc1155TokenId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc1155TokenProperties",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint128",
+ "name": "erc1155TokenAmount",
+ "type": "uint128"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.ERC1155Order",
+ "name": "order",
+ "type": "tuple"
},
- "returns": {
- "buyAmount": "Amount of ETH bought."
+ {
+ "internalType": "uint256",
+ "name": "erc1155TokenId",
+ "type": "uint256"
}
- },
- "sellTokenForTokenToUniswapV3(bytes,uint256,uint256,address)": {
- "details": "Sell a token for another token directly against uniswap v3.",
- "params": {
- "encodedPath": "Uniswap-encoded path.",
- "minBuyAmount": "Minimum amount of the last token in the path to buy.",
- "recipient": "The recipient of the bought tokens. Can be zero for sender.",
- "sellAmount": "amount of the first token in the path to sell."
+ ],
+ "name": "validateERC1155OrderProperties",
+ "outputs": [],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc20TokenAmount",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "contract IERC1155Token",
+ "name": "erc1155Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc1155TokenId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc1155TokenProperties",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint128",
+ "name": "erc1155TokenAmount",
+ "type": "uint128"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.ERC1155Order",
+ "name": "order",
+ "type": "tuple"
},
- "returns": {
- "buyAmount": "Amount of the last token in the path bought."
- }
- },
- "setQuoteSigner(address)": {
- "details": "Replace the optional signer for `transformERC20()` calldata. Only callable by the owner.",
- "params": {
- "quoteSigner": "The address of the new calldata signer."
- }
- },
- "setTransformerDeployer(address)": {
- "details": "Replace the allowed deployer for transformers. Only callable by the owner.",
- "params": {
- "transformerDeployer": "The address of the new trusted deployer for transformers."
+ {
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "signature",
+ "type": "tuple"
}
- },
- "supportInterface(bytes4)": {
- "details": "Indicates whether the 0x Exchange Proxy implements a particular ERC165 interface. This function should use at most 30,000 gas.",
- "params": {
- "interfaceId": "The interface identifier, as specified in ERC165."
+ ],
+ "name": "validateERC1155OrderSignature",
+ "outputs": [],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc20TokenAmount",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "contract IERC721Token",
+ "name": "erc721Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc721TokenProperties",
+ "type": "tuple[]"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.ERC721Order",
+ "name": "order",
+ "type": "tuple"
},
- "returns": {
- "isSupported": "Whether the given interface is supported by the 0x Exchange Proxy."
- }
- },
- "transferOwnership(address)": {
- "details": "Transfers ownership of the contract to a new address.",
- "params": {
- "newOwner": "The address that will become the owner."
- }
- },
- "transferProtocolFeesForPools(bytes32[])": {
- "details": "Transfers protocol fees from the `FeeCollector` pools into the staking contract.",
- "params": {
- "poolIds": "Staking pool IDs"
- }
- },
- "transferTrappedTokensTo(address,uint256,address)": {
- "details": "calledFrom FundRecoveryFeature.transferTrappedTokensTo() This will be delegatecalled in the context of the Exchange Proxy instance being used.",
- "params": {
- "amountOut": "Amount of tokens to withdraw.",
- "erc20": "ERC20 Token Address.",
- "recipientWallet": "Recipient wallet address."
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
}
- },
- "transformERC20(address,address,uint256,uint256,(uint32,bytes)[])": {
- "details": "Executes a series of transformations to convert an ERC20 `inputToken` to an ERC20 `outputToken`.",
- "params": {
- "inputToken": "The token being provided by the sender. If `0xeee...`, ETH is implied and should be provided with the call.`",
- "inputTokenAmount": "The amount of `inputToken` to take from the sender.",
- "minOutputTokenAmount": "The minimum amount of `outputToken` the sender must receive for the entire transformation to succeed.",
- "outputToken": "The token to be acquired by the sender. `0xeee...` implies ETH.",
- "transformations": "The transformations to execute on the token balance(s) in sequence."
+ ],
+ "name": "validateERC721OrderProperties",
+ "outputs": [],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum LibNFTOrder.TradeDirection",
+ "name": "direction",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address",
+ "name": "maker",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "taker",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "expiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "contract IERC20TokenV06",
+ "name": "erc20Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc20TokenAmount",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "feeData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Fee[]",
+ "name": "fees",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "contract IERC721Token",
+ "name": "erc721Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "contract IPropertyValidator",
+ "name": "propertyValidator",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "propertyData",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.Property[]",
+ "name": "erc721TokenProperties",
+ "type": "tuple[]"
+ }
+ ],
+ "internalType": "struct LibNFTOrder.ERC721Order",
+ "name": "order",
+ "type": "tuple"
},
- "returns": {
- "outputTokenAmount": "The amount of `outputToken` received by the sender."
- }
- },
- "uniswapV3SwapCallback(int256,int256,bytes)": {
- "details": "The UniswapV3 pool swap callback which pays the funds requested by the caller/pool to the pool. Can only be called by a valid UniswapV3 pool.",
- "params": {
- "amount0Delta": "Token0 amount owed.",
- "amount1Delta": "Token1 amount owed.",
- "data": "Arbitrary data forwarded from swap() caller. An ABI-encoded struct of: inputToken, outputToken, fee, payer"
- }
- },
- "validateERC1155OrderProperties((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128),uint256)": {
- "details": "If the given order is buying an ERC1155 asset, checks whether or not the given token ID satisfies the required properties specified in the order. If the order does not specify any properties, this function instead checks whether the given token ID matches the ID in the order. Reverts if any checks fail, or if the order is selling an ERC1155 asset.",
- "params": {
- "erc1155TokenId": "The ID of the ERC1155 asset.",
- "order": "The ERC1155 order."
- }
- },
- "validateERC1155OrderSignature((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[],uint128),(uint8,uint8,bytes32,bytes32))": {
- "details": "Checks whether the given signature is valid for the the given ERC1155 order. Reverts if not.",
- "params": {
- "order": "The ERC1155 order.",
- "signature": "The signature to validate."
- }
- },
- "validateERC721OrderProperties((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]),uint256)": {
- "details": "If the given order is buying an ERC721 asset, checks whether or not the given token ID satisfies the required properties specified in the order. If the order does not specify any properties, this function instead checks whether the given token ID matches the ID in the order. Reverts if any checks fail, or if the order is selling an ERC721 asset.",
- "params": {
- "erc721TokenId": "The ID of the ERC721 asset.",
- "order": "The ERC721 order."
- }
- },
- "validateERC721OrderSignature((uint8,address,address,uint256,uint256,address,uint256,(address,uint256,bytes)[],address,uint256,(address,bytes)[]),(uint8,uint8,bytes32,bytes32))": {
- "details": "Checks whether the given signature is valid for the the given ERC721 order. Reverts if not.",
- "params": {
- "order": "The ERC721 order.",
- "signature": "The signature to validate."
+ {
+ "components": [
+ {
+ "internalType": "enum LibSignature.SignatureType",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct LibSignature.Signature",
+ "name": "signature",
+ "type": "tuple"
}
- }
- },
- "version": 1
- }
-}
\ No newline at end of file
+ ],
+ "name": "validateERC721OrderSignature",
+ "outputs": [],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ]
+}
diff --git a/contracts/artifacts/LiquoriceSettlement.json b/contracts/artifacts/LiquoriceSettlement.json
new file mode 100644
index 0000000000..a0c1e0a46f
--- /dev/null
+++ b/contracts/artifacts/LiquoriceSettlement.json
@@ -0,0 +1,4193 @@
+{
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ {
+ "name": "authenticator_",
+ "type": "address",
+ "internalType": "contract IAllowListAuthentication"
+ },
+ {
+ "name": "repository_",
+ "type": "address",
+ "internalType": "contract IRepository"
+ },
+ {
+ "name": "permit2_",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "receive",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "event",
+ "name": "Interaction",
+ "inputs": [
+ {
+ "name": "target",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "selector",
+ "type": "bytes4",
+ "indexed": false,
+ "internalType": "bytes4"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "TradeOrder",
+ "inputs": [
+ {
+ "name": "rfqId",
+ "type": "string",
+ "indexed": true,
+ "internalType": "string"
+ },
+ {
+ "name": "trader",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ },
+ {
+ "name": "effectiveTrader",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ },
+ {
+ "name": "baseToken",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ },
+ {
+ "name": "quoteToken",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ },
+ {
+ "name": "baseTokenAmount",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "quoteTokenAmount",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "recipient",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignature",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignatureLength",
+ "inputs": [
+ {
+ "name": "length",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ECDSAInvalidSignatureS",
+ "inputs": [
+ {
+ "name": "s",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "InvalidAmount",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidAsset",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidBaseTokenAmounts",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidDestination",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidEIP1271Signature",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidEIP712Signature",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidETHSignSignature",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidFillAmount",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidHooksTarget",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidInteractionsBaseTokenAmounts",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidInteractionsQuoteTokenAmounts",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidLendingPoolInteraction",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidQuoteTokenAmounts",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidSignatureType",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidSigner",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidSource",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "NonceInvalid",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "NotMaker",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "NotSolver",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "OrderExpired",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "PartialFillNotSupported",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "ReceiverNotManager",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "ReentrancyGuardReentrantCall",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "SafeERC20FailedOperation",
+ "inputs": [
+ {
+ "name": "token",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SignatureIsExpired",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "SignatureIsNotEmpty",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "UpdatedMakerAmountsTooLow",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "ZeroMakerAmount",
+ "inputs": []
+ },
+ {
+ "type": "function",
+ "name": "AUTHENTICATOR",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract IAllowListAuthentication"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "BALANCE_MANAGER",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract IBalanceManager"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "DOMAIN_SEPARATOR",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "hashSingleOrder",
+ "inputs": [
+ {
+ "name": "_order",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.Single",
+ "components": [
+ {
+ "name": "rfqId",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "trader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "effectiveTrader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "baseToken",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "quoteToken",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "baseTokenAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "quoteTokenAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "minFillAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "quoteExpiry",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "recipient",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "isValidSignature",
+ "inputs": [
+ {
+ "name": "_hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "_signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "settle",
+ "inputs": [
+ {
+ "name": "_signer",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "_filledTakerAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "_order",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.Order",
+ "components": [
+ {
+ "name": "market",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "chainId",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "rfqId",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "trader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "effectiveTrader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "quoteExpiry",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "recipient",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "minFillAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "baseTokenData",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.BaseTokenData",
+ "components": [
+ {
+ "name": "addr",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toRecipient",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toRepay",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toSupply",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "name": "quoteTokenData",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.QuoteTokenData",
+ "components": [
+ {
+ "name": "addr",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toTrader",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toWithdraw",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toBorrow",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "_interactions",
+ "type": "tuple[]",
+ "internalType": "struct GPv2Interaction.Data[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "_hooks",
+ "type": "tuple",
+ "internalType": "struct GPv2Interaction.Hooks",
+ "components": [
+ {
+ "name": "beforeSettle",
+ "type": "tuple[]",
+ "internalType": "struct GPv2Interaction.Data[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "afterSettle",
+ "type": "tuple[]",
+ "internalType": "struct GPv2Interaction.Data[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "_makerSignature",
+ "type": "tuple",
+ "internalType": "struct Signature.TypedSignature",
+ "components": [
+ {
+ "name": "signatureType",
+ "type": "uint8",
+ "internalType": "enum Signature.Type"
+ },
+ {
+ "name": "transferCommand",
+ "type": "uint8",
+ "internalType": "enum Signature.TransferCommand"
+ },
+ {
+ "name": "signatureBytes",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "_takerSignature",
+ "type": "tuple",
+ "internalType": "struct Signature.TypedSignature",
+ "components": [
+ {
+ "name": "signatureType",
+ "type": "uint8",
+ "internalType": "enum Signature.Type"
+ },
+ {
+ "name": "transferCommand",
+ "type": "uint8",
+ "internalType": "enum Signature.TransferCommand"
+ },
+ {
+ "name": "signatureBytes",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "settleSingle",
+ "inputs": [
+ {
+ "name": "_signer",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "_order",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.Single",
+ "components": [
+ {
+ "name": "rfqId",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "trader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "effectiveTrader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "baseToken",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "quoteToken",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "baseTokenAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "quoteTokenAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "minFillAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "quoteExpiry",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "recipient",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ },
+ {
+ "name": "_makerSignature",
+ "type": "tuple",
+ "internalType": "struct Signature.TypedSignature",
+ "components": [
+ {
+ "name": "signatureType",
+ "type": "uint8",
+ "internalType": "enum Signature.Type"
+ },
+ {
+ "name": "transferCommand",
+ "type": "uint8",
+ "internalType": "enum Signature.TransferCommand"
+ },
+ {
+ "name": "signatureBytes",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "_filledTakerAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "_takerSignature",
+ "type": "tuple",
+ "internalType": "struct Signature.TypedSignature",
+ "components": [
+ {
+ "name": "signatureType",
+ "type": "uint8",
+ "internalType": "enum Signature.Type"
+ },
+ {
+ "name": "transferCommand",
+ "type": "uint8",
+ "internalType": "enum Signature.TransferCommand"
+ },
+ {
+ "name": "signatureBytes",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ }
+ ],
+ "bytecode": {
+ "object": "0x61012060405234801562000011575f80fd5b5060405162004ef638038062004ef6833981016040819052620000349162000175565b4660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f64afec7be651c92f86754beb2bd5eeaf2fa95e83faf4aee989877dde08e4498c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201526080810192909252309082015260c00160408051601f19818403018152908290528051602090910120608052600180556001600160a01b03841660c05230908290620000fe906200014f565b6001600160a01b03928316815291166020820152604001604051809103905ff0801580156200012f573d5f803e3d5ffd5b506001600160a01b0390811660e052919091166101005250620001c69050565b610963806200459383390190565b6001600160a01b038116811462000172575f80fd5b50565b5f805f6060848603121562000188575f80fd5b835162000195816200015d565b6020850151909350620001a8816200015d565b6040850151909250620001bb816200015d565b809150509250925092565b60805160a05160c05160e0516101005161432d620002665f395f81816102570152818161078401526116dc01525f8181610197015281816107ba0152818161188c01528181611e2c01528181611f1e0152818161202c0152818161230b01528181612427015261303c01525f818161033801528181610412015281816106a70152818161152001526115ff01525f6104da01525f6105a4015261432d5ff3fe608060405260043610610126575f3560e01c8063a5cdc8fc116100a1578063c618618111610071578063db58772811610057578063db58772814610379578063e242924e1461038c578063fa5cd56c146103ab575f80fd5b8063c618618114610327578063cba673a71461035a575f80fd5b8063a5cdc8fc146102ab578063a7ab49bc146102ca578063ae80c584146102e9578063b11f126214610308575f80fd5b806351d46815116100f65780636f35d2d2116100dc5780636f35d2d214610246578063875530ff146102795780639935c86814610298575f80fd5b806351d46815146102125780635aa0e95d14610227575f80fd5b80631626ba7e1461013157806329bcdc95146101865780633644e515146101d15780634c9e03d3146101f3575f80fd5b3661012d57005b5f80fd5b34801561013c575f80fd5b5061015061014b366004613595565b6103ca565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b348015610191575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161017d565b3480156101dc575f80fd5b506101e56104d7565b60405190815260200161017d565b3480156101fe575f80fd5b506101e561020d366004613620565b6105c6565b6102256102203660046136d7565b610667565b005b348015610232575f80fd5b506102256102413660046137e1565b6109e8565b348015610251575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610284575f80fd5b506101e5610293366004613620565b610c30565b6102256102a636600461383f565b610c5f565b3480156102b6575f80fd5b506102256102c53660046138dd565b610c7f565b3480156102d5575f80fd5b506102256102e4366004613901565b610c8c565b3480156102f4575f80fd5b5061022561030336600461399d565b611067565b348015610313575f80fd5b506101e56103223660046139f2565b6112eb565b348015610332575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610365575f80fd5b50610225610374366004613a24565b6114ea565b610225610387366004613b0b565b611878565b348015610397575f80fd5b506101e56103a6366004613bc9565b61194c565b3480156103b6575f80fd5b506102256103c5366004613bc9565b611a8e565b5f806103d7858585611b50565b6040517fe75600c30000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063e75600c390602401602060405180830381865afa158015610459573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061047d9190613bfb565b156104ab577f1626ba7e356f5979dd355a3d2bfb43e80420a480c3b854edce286a82d74968699150506104d0565b507fffffffff0000000000000000000000000000000000000000000000000000000090505b9392505050565b5f7f000000000000000000000000000000000000000000000000000000000000000046146105a157604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f64afec7be651c92f86754beb2bd5eeaf2fa95e83faf4aee989877dde08e4498c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b5f7f68b8e94dc077458241d6c8d89f0a7665c7cda2cfe70c9eb4437efee1663c66fe6105f56020840184613c16565b836020013584604001358560600135866080013560405160200161064a969594939291909586526001600160a01b0394909416602086015260408501929092526060840152608083015260a082015260c00190565b604051602081830303815290604052805190602001209050919050565b61066f611bdb565b6040517fe75600c30000000000000000000000000000000000000000000000000000000081526001600160a01b038a811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e75600c390602401602060405180830381865afa1580156106ec573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107109190613bfb565b610746576040517fb331e42100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200870135881580159061076057506101608801358911155b1561077f5761077c896102008a01356101608b01356001611c1e565b90505b6107b07f00000000000000000000000000000000000000000000000000000000000000008b838b8b8b8b8b8b611c69565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663bc1178e66107ef60c08b0160a08c01613c16565b6108016101408c016101208d01613c16565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526108449291906101608e0135908890600401613c8d565b5f604051808303815f87803b15801561085b575f80fd5b505af115801561086d573d5f803e3d5ffd5b505050506108b4888b838c5f148061088957506101608c01358d115b610893578c61089a565b6101608c01355b898c8c60026108af60408e0160208f01613d61565b611e01565b6108c16040890189613d7f565b6040516108cf929190613de0565b6040519081900390207f0fce007c38c6c8ed9e545b3a148095762738618f8c21b673222613e4d45734b661090960a08b0160808c01613c16565b61091960c08c0160a08d01613c16565b61092b6101408d016101208e01613c16565b61093d6101e08e016101c08f01613c16565b8e158061094e57506101608e01358f115b610958578e61095f565b6101408e01355b6102008f013588146109715787610978565b6101e08f01355b8f60e001602081019061098b9190613c16565b604080516001600160a01b0398891681529688166020880152948716948601949094529185166060850152608084015260a083015290911660c082015260e00160405180910390a2506109dd60018055565b505050505050505050565b5f5b6109f48280613def565b9050811015610b065736610a088380613def565b83818110610a1857610a18613e53565b9050602002810190610a2a9190613e80565b90506001600160a01b03841663a8c4bc95610a486020840184613c16565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610aa2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac69190613bfb565b15610afd576040517fc99e887200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001016109ea565b505f5b610b166020830183613def565b9050811015610c2b5736610b2d6020840184613def565b83818110610b3d57610b3d613e53565b9050602002810190610b4f9190613e80565b90506001600160a01b03841663a8c4bc95610b6d6020840184613c16565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610bc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610beb9190613bfb565b15610c22576040517fc99e887200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600101610b09565b505050565b5f7fae676bf6913ac2689b7331293c989fe7723124faf8b5d275f06fbcebc77950096105f56020840184613c16565b610c698482612212565b610c78858585856001806122c9565b5050505050565b610c89338261261e565b50565b610cbf6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f5b828110156110535736848483818110610cdc57610cdc613e53565b9050602002810190610cee9190613e80565b9050365f610cff6040840184613d7f565b90925090506001600160a01b038b1663a8c4bc95610d206020860186613c16565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610d7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9e9190613bfb565b15611045575f8915610ddc576040517f7d617bb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60048210610de8575081355b7fc03a9de9000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610e5657610e3d83838d8c6126c4565b86602001818151610e4e9190613ebc565b905250611043565b7f243a4b7f000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610ebc57610eab83838d8c6127da565b86606001818151610e4e9190613ebc565b7f7dc4f458000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610f4757610f1183838d8c61294e565b60a088015260808701819052606087018051610f2e908390613ebc565b90525060a0860151602087018051610e4e908390613ebc565b7f68931b6b000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610fab57610f9c83838d8c612bb6565b86518790610e4e908390613ebc565b7f0c9be7e4000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016110115761100083838d8c612cc0565b86604001818151610e4e9190613ebc565b6040517f0561d8b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b505050806001019050610cc1565b5061105e8482612e29565b50505050505050565b60036110766020830183613f21565b600381111561108757611087613ef4565b036110ec576001600160a01b0383166110ac836110a76040850185613d7f565b611b50565b6001600160a01b031614610c2b576040517fb81d58e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016110fb6020830183613f21565b600381111561110c5761110c613ef4565b036111a0577f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c839052603c90206001600160a01b03841661115a826110a76040860186613d7f565b6001600160a01b03161461119a576040517f644ae6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60026111af6020830183613f21565b60038111156111c0576111c0613ef4565b036112b9577f1626ba7e000000000000000000000000000000000000000000000000000000006001600160a01b038416631626ba7e846112036040860186613d7f565b6040518463ffffffff1660e01b815260040161122193929190613f3f565b602060405180830381865afa15801561123c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112609190613f58565b7fffffffff000000000000000000000000000000000000000000000000000000001614610c2b576040517f5d52cbe300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f60cd402d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6112f46104d7565b7fd28e809b708f5ee38be8347d6d869d8232493c094ab2dde98369e4102369a99d61131f8480613d7f565b604051602001611330929190613f97565b60405160208183030381529060405280519060200120846020013585604001602081019061135e9190613c16565b60408051602081019590955284019290925260608301526001600160a01b0316608082015260a001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526113c46080850160608601613c16565b6113d460a0860160808701613c16565b6113e460c0870160a08801613c16565b60c087013560e08801356101008901356101208a013561140c6101608c016101408d01613c16565b604080516001600160a01b03998a166020820152978916908801529487166060870152608086019390935260a085019190915260c084015260e083015290911661010082015261012001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526114929291602001613fd7565b6040516020818303038152906040528051906020012060405160200161064a9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6114f2611bdb565b6040517f02cc250d0000000000000000000000000000000000000000000000000000000081523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302cc250d90602401602060405180830381865afa15801561156d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115919190613bfb565b6115c7576040517fc139eabd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe75600c30000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e75600c390602401602060405180830381865afa158015611644573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116689190613bfb565b61169e576040517fb331e42100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61020086013587158015906116b857506101608701358811155b156116d7576116d4886102008901356101608a01356001611c1e565b90505b6117087f00000000000000000000000000000000000000000000000000000000000000008a838a8a8a8a8a8a611c69565b611745878a838b158061171f57506101608b01358c115b611729578b611730565b6101608b01355b888b8b60016108af60408d0160208e01613d61565b6117526040880188613d7f565b604051611760929190613de0565b6040519081900390207f0fce007c38c6c8ed9e545b3a148095762738618f8c21b673222613e4d45734b661179a60a08a0160808b01613c16565b6117aa60c08b0160a08c01613c16565b6117bc6101408c016101208d01613c16565b6117ce6101e08d016101c08e01613c16565b8d15806117df57506101608d01358e115b6117e9578d6117f0565b6101408d01355b6102008e013588146118025787611809565b6101e08e01355b8e60e001602081019061181c9190613c16565b604080516001600160a01b0398891681529688166020880152948716948601949094529185166060850152608084015260a083015290911660c082015260e00160405180910390a25061186e60018055565b5050505050505050565b6118828583612212565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663bc1178e66118c16080880160608901613c16565b6118d160a0890160808a01613c16565b8860c00135856040518563ffffffff1660e01b81526004016118f69493929190613c8d565b5f604051808303815f87803b15801561190d575f80fd5b505af115801561191f573d5f803e3d5ffd5b5050505061194486868686600289602001602081019061193f9190613d61565b6122c9565b505050505050565b5f6119556104d7565b7fc994d2ca0375d6d473785e0ce0b1d203f069121bac1314f72c5c0fe601eb39106119836040850185613d7f565b604051602001611994929190613f97565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060608501356119df60a0870160808801613c16565b6119ef60c0880160a08901613c16565b60c0880135611a056101008a0160e08b01613c16565b60408051602081019890985287019590955260608601939093526001600160a01b039182166080860152811660a085015260c08401919091521660e0820152610100808501359082015261012001604051602081830303815290604052611a6f8461012001610c30565b611a7c856101c0016105c6565b60405160200161149293929190613feb565b6101a0810135611aa8610180830135610160840135613ebc565b611ab29190613ebc565b61014082013514611aef576040517fc04377d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610240810135611b09610220830135610200840135613ebc565b611b139190613ebc565b6101e082013514610c89576040517f877630be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611b918585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612ed692505050565b90506001600160a01b038116611bd3576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b600260015403611c17576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b5f611c4b611c2b83612f00565b8015611c4657505f8480611c4157611c41614008565b868809115b151590565b611c56868686612f2c565b611c609190613ebc565b95945050505050565b5f611c738761194c565b9050611c80898285611067565b611c9060c0880160a08901613c16565b6001600160a01b0316336001600160a01b031614611cc757611cc2611cbb60c0890160a08a01613c16565b8284611067565b611d0e565b611cd46040830183613d7f565b90505f03611d0e576040517f0e364efc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d2b611d2160c0890160a08a01613c16565b886060013561261e565b8660c00135421115611d69576040517f133df02900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f88118015611d7c575086610100013588105b15611db3576040517f9469744400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbc87611a8e565b611dc68a856109e8565b611de78a8a5f8b118015611ddf57506102008a01358b14155b8a8a8a610c8c565b611df589886060013561261e565b50505050505050505050565b611e13611e0e8680613def565b613001565b5f611e286101808b01356101a08c0135613ebc565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b519d3696040518060a001604052808d60a0016020810190611e779190613c16565b6001600160a01b03168152602001306001600160a01b031681526020018d610120015f016020810190611eaa9190613c16565b6001600160a01b03168152602001848152602001866002811115611ed057611ed0613ef4565b8152506040518263ffffffff1660e01b8152600401611eef9190614035565b5f604051808303815f87803b158015611f06575f80fd5b505af1158015611f18573d5f803e3d5ffd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b519d3696040518060a001604052808d60a0016020810190611f699190613c16565b6001600160a01b031681526020018d60e0016020810190611f8a9190613c16565b6001600160a01b031681526020018d610120015f016020810190611fae9190613c16565b6001600160a01b031681526020018a8152602001866002811115611fd457611fd4613ef4565b8152506040518263ffffffff1660e01b8152600401611ff39190614035565b5f604051808303815f87803b15801561200a575f80fd5b505af115801561201c573d5f803e3d5ffd5b5050505061202a8585613001565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b519d3696040518060a001604052808c6001600160a01b031681526020018d60800160208101906120869190613c16565b6001600160a01b031681526020018d6101c0015f0160208101906120aa9190613c16565b6001600160a01b031681526020018b81526020018560028111156120d0576120d0613ef4565b8152506040518263ffffffff1660e01b81526004016120ef9190614035565b5f604051808303815f87803b158015612106575f80fd5b505af1158015612118573d5f803e3d5ffd5b5061212e9250611e0e9150506020880188613def565b5f6121416101408c016101208d01613c16565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561219e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121c291906140b4565b90508015612205576122056121de6101008d0160e08e01613c16565b828d610120015f0160208101906121f59190613c16565b6001600160a01b03169190613139565b5050505050505050505050565b6122226080830160608401613c16565b6001600160a01b0316336001600160a01b0316146122615761225c61224d6080840160608501613c16565b612256846112eb565b83611067565b6122a8565b61226e6040820182613d7f565b90505f036122a8576040517f0e364efc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122c56122bb6080840160608501613c16565b836020013561261e565b5050565b60e085013583158015906122e057508560c0013584105b156122fd576122fa848760e001358860c001356001611c1e565b90505b612309878288886131b9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b519d3696040518060a001604052808960600160208101906123569190613c16565b6001600160a01b031681526020016123766101608b016101408c01613c16565b6001600160a01b0316815260200161239460a08b0160808c01613c16565b6001600160a01b031681526020018715806123b257508960c0013588115b6123bc57876123c2565b8960c001355b81526020018660028111156123d9576123d9613ef4565b8152506040518263ffffffff1660e01b81526004016123f89190614035565b5f604051808303815f87803b15801561240f575f80fd5b505af1158015612421573d5f803e3d5ffd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b519d3696040518060a001604052808a6001600160a01b031681526020018960400160208101906124819190613c16565b6001600160a01b0316815260200161249f60c08b0160a08c01613c16565b6001600160a01b031681526020018481526020018560028111156124c5576124c5613ef4565b8152506040518263ffffffff1660e01b81526004016124e49190614035565b5f604051808303815f87803b1580156124fb575f80fd5b505af115801561250d573d5f803e3d5ffd5b5061251e9250889150819050613d7f565b60405161252c929190613de0565b60405180910390207f0fce007c38c6c8ed9e545b3a148095762738618f8c21b673222613e4d45734b68760400160208101906125689190613c16565b61257860808a0160608b01613c16565b61258860a08b0160808c01613c16565b61259860c08c0160a08d01613c16565b8915806125a857508b60c001358a115b6125b257896125b8565b8b60c001355b878d6101400160208101906125cd9190613c16565b604080516001600160a01b0398891681529688166020880152948716948601949094529185166060850152608084015260a083015290911660c082015260e00160405180910390a250505050505050565b6001600160a01b0382165f9081526020818152604080832084845290915290205460ff1615612679576040517fbc0da7d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039091165f908152602081815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b5f8080806126d5876004818b6140cb565b8101906126e291906140f2565b50919450925090506126fc61014086016101208701613c16565b6001600160a01b0316836001600160a01b031614612746576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b0316866001600160a01b031614612791576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101a085013581146127cf576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b979650505050505050565b5f808080806127ec886004818c6140cb565b8101906127f99190614142565b929650909450925090506128156101e087016101c08801613c16565b6001600160a01b0316846001600160a01b03161461285f576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316876001600160a01b0316146128aa576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128ba60a0870160808801613c16565b6001600160a01b0316826001600160a01b031614612904576040517fac6b05f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102408601358114612942576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b98975050505050505050565b5f805f805f805f805f8c8c600490809261296a939291906140cb565b8101906129779190614190565b959c50939a50919850965094509250905061299a6101e08b016101c08c01613c16565b6001600160a01b0316876001600160a01b0316146129e4576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b856001600160a01b03168b6001600160a01b031614612a2f576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385163014612a71576040517f8154374b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a8160a08b0160808c01613c16565b6001600160a01b0316846001600160a01b031614612acb576040517fac6b05f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102408a01358314612b09576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b1b6101408b016101208c01613c16565b6001600160a01b0316826001600160a01b031614612b65576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101a08a01358114612ba3576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919c919b50909950505050505050505050565b5f808080612bc7876004818b6140cb565b810190612bd4919061420f565b91945092509050612bed61014086016101208701613c16565b6001600160a01b0316836001600160a01b031614612c37576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b0316866001600160a01b031614612c82576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61018085013581146127cf576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80808080612cd2886004818c6140cb565b810190612cdf919061424d565b5092965090945092509050612cfc6101e087016101c08801613c16565b6001600160a01b0316846001600160a01b031614612d46576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316876001600160a01b031614612d91576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612da160a0870160808801613c16565b6001600160a01b0316826001600160a01b031614612deb576040517fac6b05f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102208601358114612942576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051610180830135141580612e47575060208101516101a083013514155b15612e7e576040517f4a55da2000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040810151610220830135141580612e9f5750606081015161024083013514155b156122c5576040517f77a5920300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f80612ee4868661325c565b925092509250612ef482826132a5565b50909150505b92915050565b5f6002826003811115612f1557612f15613ef4565b612f1f91906142b1565b60ff166001149050919050565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f03612f7f57838281612f7557612f75614008565b04925050506104d0565b808411612f9657612f9660038515026011186133ad565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f5b81811015610c2b573683838381811061301e5761301e613e53565b90506020028101906130309190613e80565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166130696020830183613c16565b6001600160a01b0316036130a9576040517f79a1bff000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130b2816133be565b6130bf6020820182613c16565b6001600160a01b03167fed99827efb37016f2275f98c4bcf71c7551c75d59e9b450f79fa32e60be672c282602001356130f784613401565b604080519283527fffffffff0000000000000000000000000000000000000000000000000000000090911660208301520160405180910390a250600101613003565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610c2b90849061342a565b5f831180156131cc575081610100013583105b15613203576040517f9469744400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61321084612256846112eb565b61321e84836020013561261e565b428261012001351161119a576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f8351604103613293576020840151604085015160608601515f1a613285888285856134af565b95509550955050505061329e565b505081515f91506002905b9250925092565b5f8260038111156132b8576132b8613ef4565b036132c1575050565b60018260038111156132d5576132d5613ef4565b0361330c576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561332057613320613ef4565b0361335f576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b600382600381111561337357613373613ef4565b036122c5576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401613356565b634e487b715f52806020526024601cfd5b5f6133cc6020830183613c16565b90506020820135365f6133e26040860186613d7f565b91509150604051818382375f80838387895af1611944573d5f803e3d5ffd5b5f36816134116040850185613d7f565b90925090506004811061342357813592505b5050919050565b5f8060205f8451602086015f885af180613449576040513d5f823e3d81fd5b50505f513d9150811561346057806001141561346d565b6001600160a01b0384163b155b1561119a576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401613356565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156134e857505f9150600390508261358b565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613539573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b03811661358257505f92506001915082905061358b565b92505f91508190505b9450945094915050565b5f805f604084860312156135a7575f80fd5b83359250602084013567ffffffffffffffff808211156135c5575f80fd5b818601915086601f8301126135d8575f80fd5b8135818111156135e6575f80fd5b8760208285010111156135f7575f80fd5b6020830194508093505050509250925092565b5f60a0828403121561361a575f80fd5b50919050565b5f60a08284031215613630575f80fd5b6104d0838361360a565b6001600160a01b0381168114610c89575f80fd5b80356136598161363a565b919050565b5f610260828403121561361a575f80fd5b5f8083601f84011261367f575f80fd5b50813567ffffffffffffffff811115613696575f80fd5b6020830191508360208260051b85010111156136b0575f80fd5b9250929050565b5f6040828403121561361a575f80fd5b5f6060828403121561361a575f80fd5b5f805f805f805f805f6101008a8c0312156136f0575f80fd5b6136f98a61364e565b985060208a0135975060408a013567ffffffffffffffff8082111561371c575f80fd5b6137288d838e0161365e565b985060608c013591508082111561373d575f80fd5b6137498d838e0161366f565b909850965060808c0135915080821115613761575f80fd5b61376d8d838e016136b7565b955060a08c0135915080821115613782575f80fd5b61378e8d838e016136c7565b945060c08c01359150808211156137a3575f80fd5b6137af8d838e016136c7565b935060e08c01359150808211156137c4575f80fd5b506137d18c828d016136c7565b9150509295985092959850929598565b5f80604083850312156137f2575f80fd5b82356137fd8161363a565b9150602083013567ffffffffffffffff811115613818575f80fd5b613824858286016136b7565b9150509250929050565b5f610160828403121561361a575f80fd5b5f805f805f60a08688031215613853575f80fd5b853561385e8161363a565b9450602086013567ffffffffffffffff8082111561387a575f80fd5b61388689838a0161382e565b9550604088013591508082111561389b575f80fd5b6138a789838a016136c7565b94506060880135935060808801359150808211156138c3575f80fd5b506138d0888289016136c7565b9150509295509295909350565b5f602082840312156138ed575f80fd5b5035919050565b8015158114610c89575f80fd5b5f805f805f8060a08789031215613916575f80fd5b86356139218161363a565b955060208701356139318161363a565b94506040870135613941816138f4565b9350606087013567ffffffffffffffff8082111561395d575f80fd5b6139698a838b0161365e565b9450608089013591508082111561397e575f80fd5b5061398b89828a0161366f565b979a9699509497509295939492505050565b5f805f606084860312156139af575f80fd5b83356139ba8161363a565b925060208401359150604084013567ffffffffffffffff8111156139dc575f80fd5b6139e8868287016136c7565b9150509250925092565b5f60208284031215613a02575f80fd5b813567ffffffffffffffff811115613a18575f80fd5b611bd38482850161382e565b5f805f805f805f8060e0898b031215613a3b575f80fd5b613a448961364e565b975060208901359650604089013567ffffffffffffffff80821115613a67575f80fd5b613a738c838d0161365e565b975060608b0135915080821115613a88575f80fd5b613a948c838d0161366f565b909750955060808b0135915080821115613aac575f80fd5b613ab88c838d016136b7565b945060a08b0135915080821115613acd575f80fd5b613ad98c838d016136c7565b935060c08b0135915080821115613aee575f80fd5b50613afb8b828c016136c7565b9150509295985092959890939650565b5f805f805f8060c08789031215613b20575f80fd5b613b298761364e565b9550602087013567ffffffffffffffff80821115613b45575f80fd5b613b518a838b0161382e565b96506040890135915080821115613b66575f80fd5b613b728a838b016136c7565b9550606089013594506080890135915080821115613b8e575f80fd5b613b9a8a838b016136c7565b935060a0890135915080821115613baf575f80fd5b50613bbc89828a016136c7565b9150509295509295509295565b5f60208284031215613bd9575f80fd5b813567ffffffffffffffff811115613bef575f80fd5b611bd38482850161365e565b5f60208284031215613c0b575f80fd5b81516104d0816138f4565b5f60208284031215613c26575f80fd5b81356104d08161363a565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b803565ffffffffffff81168114613659575f80fd5b5f6001600160a01b0380871683528086166020840152508360408301526080606083015282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613ce2575f80fd5b830160208101903567ffffffffffffffff811115613cfe575f80fd5b803603821315613d0c575f80fd5b60606080850152613d2160e085018284613c31565b915050613d3060208501613c78565b65ffffffffffff80821660a086015280613d4c60408801613c78565b1660c086015250508091505095945050505050565b5f60208284031215613d71575f80fd5b8135600381106104d0575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613db2575f80fd5b83018035915067ffffffffffffffff821115613dcc575f80fd5b6020019150368190038213156136b0575f80fd5b818382375f9101908152919050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613e22575f80fd5b83018035915067ffffffffffffffff821115613e3c575f80fd5b6020019150600581901b36038213156136b0575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613eb2575f80fd5b9190910192915050565b80820180821115612efa577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208284031215613f31575f80fd5b8135600481106104d0575f80fd5b838152604060208201525f611c60604083018486613c31565b5f60208284031215613f68575f80fd5b81517fffffffff00000000000000000000000000000000000000000000000000000000811681146104d0575f80fd5b602081525f611bd3602083018486613c31565b5f81515f5b81811015613fc95760208185018101518683015201613faf565b505f93019283525090919050565b5f611bd3613fe58386613faa565b84613faa565b5f613ff68286613faa565b93845250506020820152604001919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f60a0820190506001600160a01b0380845116835280602085015116602084015280604085015116604084015250606083015160608301526080830151600381106140a7577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8060808401525092915050565b5f602082840312156140c4575f80fd5b5051919050565b5f80858511156140d9575f80fd5b838611156140e5575f80fd5b5050820193919092039150565b5f805f8060808587031215614105575f80fd5b84356141108161363a565b935060208501356141208161363a565b9250604085013591506060850135614137816138f4565b939692955090935050565b5f805f8060808587031215614155575f80fd5b84356141608161363a565b935060208501356141708161363a565b925060408501356141808161363a565b9396929550929360600135925050565b5f805f805f805f60e0888a0312156141a6575f80fd5b87356141b18161363a565b965060208801356141c18161363a565b955060408801356141d18161363a565b945060608801356141e18161363a565b93506080880135925060a08801356141f88161363a565b8092505060c0880135905092959891949750929550565b5f805f60608486031215614221575f80fd5b833561422c8161363a565b9250602084013561423c8161363a565b929592945050506040919091013590565b5f805f805f60a08688031215614261575f80fd5b853561426c8161363a565b9450602086013561427c8161363a565b9350604086013561428c8161363a565b92506060860135915060808601356142a3816138f4565b809150509295509295909350565b5f60ff8316806142e8577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff8416069150509291505056fea26469706673582212209be58acada353061a2a202cc7011f3c91393e0f2e305e9202445b042fc4a4ce664736f6c6343000817003360c060405234801561000f575f80fd5b5060405161096338038061096383398101604081905261002e91610060565b6001600160a01b039182166080521660a052610091565b80516001600160a01b038116811461005b575f80fd5b919050565b5f8060408385031215610071575f80fd5b61007a83610045565b915061008860208401610045565b90509250929050565b60805160a05161089e6100c55f395f81816048015281816101f2015261038101525f818160d30152610327015261089e5ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c80636afdd85014610043578063b519d36914610093578063bc1178e6146100a8575b5f80fd5b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100a66100a136600461060a565b6100bb565b005b6100a66100b6366004610648565b61030f565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016811461012b576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060820135156101af57600161014760a08401608085016106dd565b6002811115610158576101586106b0565b036101b3576101af61016d6020840184610702565b61017d6040850160208601610702565b606085018035906101919060408801610702565b73ffffffffffffffffffffffffffffffffffffffff169291906104cc565b5050565b60026101c560a08401608085016106dd565b60028111156101d6576101d66106b0565b036102dd5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166336c785166102246020850185610702565b6102346040860160208701610702565b606086018035906102489060408901610702565b60405160e086901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff94851660048201529284166024840152908316604483015290911660648201526084015f604051808303815f87803b1580156102c3575f80fd5b505af11580156102d5573d5f803e3d5ffd5b505050505050565b6040517fc79aaa4400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016811461037f576040517f7c214f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632b67b57086604051806060016040528060405180608001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200188604001602081019061041d919061071b565b65ffffffffffff16815260200188602001602081019061043d919061071b565b65ffffffffffff1690528152306020820152604090810190610465906060890190890161071b565b65ffffffffffff1690526104798680610740565b6040518563ffffffff1660e01b815260040161049894939291906107a8565b5f604051808303815f87803b1580156104af575f80fd5b505af11580156104c1573d5f803e3d5ffd5b505050505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610561908590610567565b50505050565b5f8060205f8451602086015f885af180610586576040513d5f823e3d81fd5b50505f513d9150811561059d5780600114156105b7565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610561576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240160405180910390fd5b5f60a0828403121561061a575f80fd5b50919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610643575f80fd5b919050565b5f805f806080858703121561065b575f80fd5b61066485610620565b935061067260208601610620565b925060408501359150606085013567ffffffffffffffff811115610694575f80fd5b8501606081880312156106a5575f80fd5b939692955090935050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082840312156106ed575f80fd5b8135600381106106fb575f80fd5b9392505050565b5f60208284031215610712575f80fd5b6106fb82610620565b5f6020828403121561072b575f80fd5b813565ffffffffffff811681146106fb575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610773575f80fd5b83018035915067ffffffffffffffff82111561078d575f80fd5b6020019150368190038213156107a1575f80fd5b9250929050565b5f61010073ffffffffffffffffffffffffffffffffffffffff80881684528651818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208801511660a085015250604086015160c08401528060e08401528381840152506101208385828501375f838501820152601f9093017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910190910194935050505056fea2646970667358221220f3565f6589500276fcbb6fb33d3ee3b534d9566c5b2732fe10a6039b753c3a0764736f6c63430008170033",
+ "sourceMap": "975:10890:90:-:0;;;2483:234;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3749:13:91;3730:32;;;;3811:93;;;1026:66;3811:93;;;1092:25:169;879:32:91;1133:18:169;;;1126:34;;;;957:14:91;1176:18:169;;;1169:34;1219:18;;;1212:34;;;;3898:4:91;1262:19:169;;;1255:61;1064:19;;3811:93:91;;;-1:-1:-1;;3811:93:91;;;;;;;;;;3801:104;;3811:93;3801:104;;;;3768:137;;1857:1:44;2061:21;;-1:-1:-1;;;;;2585:30:90;;;;2666:4;;2673:8;;2639:43;;;:::i;:::-;-1:-1:-1;;;;;1557:15:169;;;1539:34;;1609:15;;1604:2;1589:18;;1582:43;1489:2;1474:18;2639:43:90;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2621:61:90;;;;;2688:24;;;;;;-1:-1:-1;975:10890:90;;-1:-1:-1;975:10890:90;;;;;;;;;:::o;14:157:169:-;-1:-1:-1;;;;;115:31:169;;105:42;;95:70;;161:1;158;151:12;95:70;14:157;:::o;176:652::-;319:6;327;335;388:2;376:9;367:7;363:23;359:32;356:52;;;404:1;401;394:12;356:52;436:9;430:16;455:57;506:5;455:57;:::i;:::-;581:2;566:18;;560:25;531:5;;-1:-1:-1;594:59:169;560:25;594:59;:::i;:::-;724:2;709:18;;703:25;672:7;;-1:-1:-1;737:59:169;703:25;737:59;:::i;:::-;815:7;805:17;;;176:652;;;;;:::o;1327:304::-;975:10890:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ },
+ "deployedBytecode": {
+ "object": "0x608060405260043610610126575f3560e01c8063a5cdc8fc116100a1578063c618618111610071578063db58772811610057578063db58772814610379578063e242924e1461038c578063fa5cd56c146103ab575f80fd5b8063c618618114610327578063cba673a71461035a575f80fd5b8063a5cdc8fc146102ab578063a7ab49bc146102ca578063ae80c584146102e9578063b11f126214610308575f80fd5b806351d46815116100f65780636f35d2d2116100dc5780636f35d2d214610246578063875530ff146102795780639935c86814610298575f80fd5b806351d46815146102125780635aa0e95d14610227575f80fd5b80631626ba7e1461013157806329bcdc95146101865780633644e515146101d15780634c9e03d3146101f3575f80fd5b3661012d57005b5f80fd5b34801561013c575f80fd5b5061015061014b366004613595565b6103ca565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b348015610191575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161017d565b3480156101dc575f80fd5b506101e56104d7565b60405190815260200161017d565b3480156101fe575f80fd5b506101e561020d366004613620565b6105c6565b6102256102203660046136d7565b610667565b005b348015610232575f80fd5b506102256102413660046137e1565b6109e8565b348015610251575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610284575f80fd5b506101e5610293366004613620565b610c30565b6102256102a636600461383f565b610c5f565b3480156102b6575f80fd5b506102256102c53660046138dd565b610c7f565b3480156102d5575f80fd5b506102256102e4366004613901565b610c8c565b3480156102f4575f80fd5b5061022561030336600461399d565b611067565b348015610313575f80fd5b506101e56103223660046139f2565b6112eb565b348015610332575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610365575f80fd5b50610225610374366004613a24565b6114ea565b610225610387366004613b0b565b611878565b348015610397575f80fd5b506101e56103a6366004613bc9565b61194c565b3480156103b6575f80fd5b506102256103c5366004613bc9565b611a8e565b5f806103d7858585611b50565b6040517fe75600c30000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063e75600c390602401602060405180830381865afa158015610459573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061047d9190613bfb565b156104ab577f1626ba7e356f5979dd355a3d2bfb43e80420a480c3b854edce286a82d74968699150506104d0565b507fffffffff0000000000000000000000000000000000000000000000000000000090505b9392505050565b5f7f000000000000000000000000000000000000000000000000000000000000000046146105a157604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f64afec7be651c92f86754beb2bd5eeaf2fa95e83faf4aee989877dde08e4498c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b5f7f68b8e94dc077458241d6c8d89f0a7665c7cda2cfe70c9eb4437efee1663c66fe6105f56020840184613c16565b836020013584604001358560600135866080013560405160200161064a969594939291909586526001600160a01b0394909416602086015260408501929092526060840152608083015260a082015260c00190565b604051602081830303815290604052805190602001209050919050565b61066f611bdb565b6040517fe75600c30000000000000000000000000000000000000000000000000000000081526001600160a01b038a811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e75600c390602401602060405180830381865afa1580156106ec573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107109190613bfb565b610746576040517fb331e42100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610200870135881580159061076057506101608801358911155b1561077f5761077c896102008a01356101608b01356001611c1e565b90505b6107b07f00000000000000000000000000000000000000000000000000000000000000008b838b8b8b8b8b8b611c69565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663bc1178e66107ef60c08b0160a08c01613c16565b6108016101408c016101208d01613c16565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526108449291906101608e0135908890600401613c8d565b5f604051808303815f87803b15801561085b575f80fd5b505af115801561086d573d5f803e3d5ffd5b505050506108b4888b838c5f148061088957506101608c01358d115b610893578c61089a565b6101608c01355b898c8c60026108af60408e0160208f01613d61565b611e01565b6108c16040890189613d7f565b6040516108cf929190613de0565b6040519081900390207f0fce007c38c6c8ed9e545b3a148095762738618f8c21b673222613e4d45734b661090960a08b0160808c01613c16565b61091960c08c0160a08d01613c16565b61092b6101408d016101208e01613c16565b61093d6101e08e016101c08f01613c16565b8e158061094e57506101608e01358f115b610958578e61095f565b6101408e01355b6102008f013588146109715787610978565b6101e08f01355b8f60e001602081019061098b9190613c16565b604080516001600160a01b0398891681529688166020880152948716948601949094529185166060850152608084015260a083015290911660c082015260e00160405180910390a2506109dd60018055565b505050505050505050565b5f5b6109f48280613def565b9050811015610b065736610a088380613def565b83818110610a1857610a18613e53565b9050602002810190610a2a9190613e80565b90506001600160a01b03841663a8c4bc95610a486020840184613c16565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610aa2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac69190613bfb565b15610afd576040517fc99e887200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001016109ea565b505f5b610b166020830183613def565b9050811015610c2b5736610b2d6020840184613def565b83818110610b3d57610b3d613e53565b9050602002810190610b4f9190613e80565b90506001600160a01b03841663a8c4bc95610b6d6020840184613c16565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610bc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610beb9190613bfb565b15610c22576040517fc99e887200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600101610b09565b505050565b5f7fae676bf6913ac2689b7331293c989fe7723124faf8b5d275f06fbcebc77950096105f56020840184613c16565b610c698482612212565b610c78858585856001806122c9565b5050505050565b610c89338261261e565b50565b610cbf6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f5b828110156110535736848483818110610cdc57610cdc613e53565b9050602002810190610cee9190613e80565b9050365f610cff6040840184613d7f565b90925090506001600160a01b038b1663a8c4bc95610d206020860186613c16565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610d7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9e9190613bfb565b15611045575f8915610ddc576040517f7d617bb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60048210610de8575081355b7fc03a9de9000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610e5657610e3d83838d8c6126c4565b86602001818151610e4e9190613ebc565b905250611043565b7f243a4b7f000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610ebc57610eab83838d8c6127da565b86606001818151610e4e9190613ebc565b7f7dc4f458000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610f4757610f1183838d8c61294e565b60a088015260808701819052606087018051610f2e908390613ebc565b90525060a0860151602087018051610e4e908390613ebc565b7f68931b6b000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610fab57610f9c83838d8c612bb6565b86518790610e4e908390613ebc565b7f0c9be7e4000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016110115761100083838d8c612cc0565b86604001818151610e4e9190613ebc565b6040517f0561d8b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b505050806001019050610cc1565b5061105e8482612e29565b50505050505050565b60036110766020830183613f21565b600381111561108757611087613ef4565b036110ec576001600160a01b0383166110ac836110a76040850185613d7f565b611b50565b6001600160a01b031614610c2b576040517fb81d58e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016110fb6020830183613f21565b600381111561110c5761110c613ef4565b036111a0577f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c839052603c90206001600160a01b03841661115a826110a76040860186613d7f565b6001600160a01b03161461119a576040517f644ae6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60026111af6020830183613f21565b60038111156111c0576111c0613ef4565b036112b9577f1626ba7e000000000000000000000000000000000000000000000000000000006001600160a01b038416631626ba7e846112036040860186613d7f565b6040518463ffffffff1660e01b815260040161122193929190613f3f565b602060405180830381865afa15801561123c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112609190613f58565b7fffffffff000000000000000000000000000000000000000000000000000000001614610c2b576040517f5d52cbe300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f60cd402d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6112f46104d7565b7fd28e809b708f5ee38be8347d6d869d8232493c094ab2dde98369e4102369a99d61131f8480613d7f565b604051602001611330929190613f97565b60405160208183030381529060405280519060200120846020013585604001602081019061135e9190613c16565b60408051602081019590955284019290925260608301526001600160a01b0316608082015260a001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526113c46080850160608601613c16565b6113d460a0860160808701613c16565b6113e460c0870160a08801613c16565b60c087013560e08801356101008901356101208a013561140c6101608c016101408d01613c16565b604080516001600160a01b03998a166020820152978916908801529487166060870152608086019390935260a085019190915260c084015260e083015290911661010082015261012001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526114929291602001613fd7565b6040516020818303038152906040528051906020012060405160200161064a9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6114f2611bdb565b6040517f02cc250d0000000000000000000000000000000000000000000000000000000081523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302cc250d90602401602060405180830381865afa15801561156d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115919190613bfb565b6115c7576040517fc139eabd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe75600c30000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e75600c390602401602060405180830381865afa158015611644573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116689190613bfb565b61169e576040517fb331e42100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61020086013587158015906116b857506101608701358811155b156116d7576116d4886102008901356101608a01356001611c1e565b90505b6117087f00000000000000000000000000000000000000000000000000000000000000008a838a8a8a8a8a8a611c69565b611745878a838b158061171f57506101608b01358c115b611729578b611730565b6101608b01355b888b8b60016108af60408d0160208e01613d61565b6117526040880188613d7f565b604051611760929190613de0565b6040519081900390207f0fce007c38c6c8ed9e545b3a148095762738618f8c21b673222613e4d45734b661179a60a08a0160808b01613c16565b6117aa60c08b0160a08c01613c16565b6117bc6101408c016101208d01613c16565b6117ce6101e08d016101c08e01613c16565b8d15806117df57506101608d01358e115b6117e9578d6117f0565b6101408d01355b6102008e013588146118025787611809565b6101e08e01355b8e60e001602081019061181c9190613c16565b604080516001600160a01b0398891681529688166020880152948716948601949094529185166060850152608084015260a083015290911660c082015260e00160405180910390a25061186e60018055565b5050505050505050565b6118828583612212565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663bc1178e66118c16080880160608901613c16565b6118d160a0890160808a01613c16565b8860c00135856040518563ffffffff1660e01b81526004016118f69493929190613c8d565b5f604051808303815f87803b15801561190d575f80fd5b505af115801561191f573d5f803e3d5ffd5b5050505061194486868686600289602001602081019061193f9190613d61565b6122c9565b505050505050565b5f6119556104d7565b7fc994d2ca0375d6d473785e0ce0b1d203f069121bac1314f72c5c0fe601eb39106119836040850185613d7f565b604051602001611994929190613f97565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060608501356119df60a0870160808801613c16565b6119ef60c0880160a08901613c16565b60c0880135611a056101008a0160e08b01613c16565b60408051602081019890985287019590955260608601939093526001600160a01b039182166080860152811660a085015260c08401919091521660e0820152610100808501359082015261012001604051602081830303815290604052611a6f8461012001610c30565b611a7c856101c0016105c6565b60405160200161149293929190613feb565b6101a0810135611aa8610180830135610160840135613ebc565b611ab29190613ebc565b61014082013514611aef576040517fc04377d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610240810135611b09610220830135610200840135613ebc565b611b139190613ebc565b6101e082013514610c89576040517f877630be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611b918585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612ed692505050565b90506001600160a01b038116611bd3576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b600260015403611c17576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b5f611c4b611c2b83612f00565b8015611c4657505f8480611c4157611c41614008565b868809115b151590565b611c56868686612f2c565b611c609190613ebc565b95945050505050565b5f611c738761194c565b9050611c80898285611067565b611c9060c0880160a08901613c16565b6001600160a01b0316336001600160a01b031614611cc757611cc2611cbb60c0890160a08a01613c16565b8284611067565b611d0e565b611cd46040830183613d7f565b90505f03611d0e576040517f0e364efc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d2b611d2160c0890160a08a01613c16565b886060013561261e565b8660c00135421115611d69576040517f133df02900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f88118015611d7c575086610100013588105b15611db3576040517f9469744400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbc87611a8e565b611dc68a856109e8565b611de78a8a5f8b118015611ddf57506102008a01358b14155b8a8a8a610c8c565b611df589886060013561261e565b50505050505050505050565b611e13611e0e8680613def565b613001565b5f611e286101808b01356101a08c0135613ebc565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b519d3696040518060a001604052808d60a0016020810190611e779190613c16565b6001600160a01b03168152602001306001600160a01b031681526020018d610120015f016020810190611eaa9190613c16565b6001600160a01b03168152602001848152602001866002811115611ed057611ed0613ef4565b8152506040518263ffffffff1660e01b8152600401611eef9190614035565b5f604051808303815f87803b158015611f06575f80fd5b505af1158015611f18573d5f803e3d5ffd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b519d3696040518060a001604052808d60a0016020810190611f699190613c16565b6001600160a01b031681526020018d60e0016020810190611f8a9190613c16565b6001600160a01b031681526020018d610120015f016020810190611fae9190613c16565b6001600160a01b031681526020018a8152602001866002811115611fd457611fd4613ef4565b8152506040518263ffffffff1660e01b8152600401611ff39190614035565b5f604051808303815f87803b15801561200a575f80fd5b505af115801561201c573d5f803e3d5ffd5b5050505061202a8585613001565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b519d3696040518060a001604052808c6001600160a01b031681526020018d60800160208101906120869190613c16565b6001600160a01b031681526020018d6101c0015f0160208101906120aa9190613c16565b6001600160a01b031681526020018b81526020018560028111156120d0576120d0613ef4565b8152506040518263ffffffff1660e01b81526004016120ef9190614035565b5f604051808303815f87803b158015612106575f80fd5b505af1158015612118573d5f803e3d5ffd5b5061212e9250611e0e9150506020880188613def565b5f6121416101408c016101208d01613c16565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561219e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121c291906140b4565b90508015612205576122056121de6101008d0160e08e01613c16565b828d610120015f0160208101906121f59190613c16565b6001600160a01b03169190613139565b5050505050505050505050565b6122226080830160608401613c16565b6001600160a01b0316336001600160a01b0316146122615761225c61224d6080840160608501613c16565b612256846112eb565b83611067565b6122a8565b61226e6040820182613d7f565b90505f036122a8576040517f0e364efc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122c56122bb6080840160608501613c16565b836020013561261e565b5050565b60e085013583158015906122e057508560c0013584105b156122fd576122fa848760e001358860c001356001611c1e565b90505b612309878288886131b9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b519d3696040518060a001604052808960600160208101906123569190613c16565b6001600160a01b031681526020016123766101608b016101408c01613c16565b6001600160a01b0316815260200161239460a08b0160808c01613c16565b6001600160a01b031681526020018715806123b257508960c0013588115b6123bc57876123c2565b8960c001355b81526020018660028111156123d9576123d9613ef4565b8152506040518263ffffffff1660e01b81526004016123f89190614035565b5f604051808303815f87803b15801561240f575f80fd5b505af1158015612421573d5f803e3d5ffd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b519d3696040518060a001604052808a6001600160a01b031681526020018960400160208101906124819190613c16565b6001600160a01b0316815260200161249f60c08b0160a08c01613c16565b6001600160a01b031681526020018481526020018560028111156124c5576124c5613ef4565b8152506040518263ffffffff1660e01b81526004016124e49190614035565b5f604051808303815f87803b1580156124fb575f80fd5b505af115801561250d573d5f803e3d5ffd5b5061251e9250889150819050613d7f565b60405161252c929190613de0565b60405180910390207f0fce007c38c6c8ed9e545b3a148095762738618f8c21b673222613e4d45734b68760400160208101906125689190613c16565b61257860808a0160608b01613c16565b61258860a08b0160808c01613c16565b61259860c08c0160a08d01613c16565b8915806125a857508b60c001358a115b6125b257896125b8565b8b60c001355b878d6101400160208101906125cd9190613c16565b604080516001600160a01b0398891681529688166020880152948716948601949094529185166060850152608084015260a083015290911660c082015260e00160405180910390a250505050505050565b6001600160a01b0382165f9081526020818152604080832084845290915290205460ff1615612679576040517fbc0da7d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039091165f908152602081815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b5f8080806126d5876004818b6140cb565b8101906126e291906140f2565b50919450925090506126fc61014086016101208701613c16565b6001600160a01b0316836001600160a01b031614612746576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b0316866001600160a01b031614612791576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101a085013581146127cf576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b979650505050505050565b5f808080806127ec886004818c6140cb565b8101906127f99190614142565b929650909450925090506128156101e087016101c08801613c16565b6001600160a01b0316846001600160a01b03161461285f576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316876001600160a01b0316146128aa576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128ba60a0870160808801613c16565b6001600160a01b0316826001600160a01b031614612904576040517fac6b05f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102408601358114612942576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b98975050505050505050565b5f805f805f805f805f8c8c600490809261296a939291906140cb565b8101906129779190614190565b959c50939a50919850965094509250905061299a6101e08b016101c08c01613c16565b6001600160a01b0316876001600160a01b0316146129e4576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b856001600160a01b03168b6001600160a01b031614612a2f576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385163014612a71576040517f8154374b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a8160a08b0160808c01613c16565b6001600160a01b0316846001600160a01b031614612acb576040517fac6b05f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102408a01358314612b09576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b1b6101408b016101208c01613c16565b6001600160a01b0316826001600160a01b031614612b65576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101a08a01358114612ba3576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919c919b50909950505050505050505050565b5f808080612bc7876004818b6140cb565b810190612bd4919061420f565b91945092509050612bed61014086016101208701613c16565b6001600160a01b0316836001600160a01b031614612c37576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b0316866001600160a01b031614612c82576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61018085013581146127cf576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80808080612cd2886004818c6140cb565b810190612cdf919061424d565b5092965090945092509050612cfc6101e087016101c08801613c16565b6001600160a01b0316846001600160a01b031614612d46576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316876001600160a01b031614612d91576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612da160a0870160808801613c16565b6001600160a01b0316826001600160a01b031614612deb576040517fac6b05f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102208601358114612942576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051610180830135141580612e47575060208101516101a083013514155b15612e7e576040517f4a55da2000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040810151610220830135141580612e9f5750606081015161024083013514155b156122c5576040517f77a5920300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f80612ee4868661325c565b925092509250612ef482826132a5565b50909150505b92915050565b5f6002826003811115612f1557612f15613ef4565b612f1f91906142b1565b60ff166001149050919050565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f03612f7f57838281612f7557612f75614008565b04925050506104d0565b808411612f9657612f9660038515026011186133ad565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f5b81811015610c2b573683838381811061301e5761301e613e53565b90506020028101906130309190613e80565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166130696020830183613c16565b6001600160a01b0316036130a9576040517f79a1bff000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130b2816133be565b6130bf6020820182613c16565b6001600160a01b03167fed99827efb37016f2275f98c4bcf71c7551c75d59e9b450f79fa32e60be672c282602001356130f784613401565b604080519283527fffffffff0000000000000000000000000000000000000000000000000000000090911660208301520160405180910390a250600101613003565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610c2b90849061342a565b5f831180156131cc575081610100013583105b15613203576040517f9469744400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61321084612256846112eb565b61321e84836020013561261e565b428261012001351161119a576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f8351604103613293576020840151604085015160608601515f1a613285888285856134af565b95509550955050505061329e565b505081515f91506002905b9250925092565b5f8260038111156132b8576132b8613ef4565b036132c1575050565b60018260038111156132d5576132d5613ef4565b0361330c576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561332057613320613ef4565b0361335f576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b600382600381111561337357613373613ef4565b036122c5576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401613356565b634e487b715f52806020526024601cfd5b5f6133cc6020830183613c16565b90506020820135365f6133e26040860186613d7f565b91509150604051818382375f80838387895af1611944573d5f803e3d5ffd5b5f36816134116040850185613d7f565b90925090506004811061342357813592505b5050919050565b5f8060205f8451602086015f885af180613449576040513d5f823e3d81fd5b50505f513d9150811561346057806001141561346d565b6001600160a01b0384163b155b1561119a576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401613356565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156134e857505f9150600390508261358b565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613539573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b03811661358257505f92506001915082905061358b565b92505f91508190505b9450945094915050565b5f805f604084860312156135a7575f80fd5b83359250602084013567ffffffffffffffff808211156135c5575f80fd5b818601915086601f8301126135d8575f80fd5b8135818111156135e6575f80fd5b8760208285010111156135f7575f80fd5b6020830194508093505050509250925092565b5f60a0828403121561361a575f80fd5b50919050565b5f60a08284031215613630575f80fd5b6104d0838361360a565b6001600160a01b0381168114610c89575f80fd5b80356136598161363a565b919050565b5f610260828403121561361a575f80fd5b5f8083601f84011261367f575f80fd5b50813567ffffffffffffffff811115613696575f80fd5b6020830191508360208260051b85010111156136b0575f80fd5b9250929050565b5f6040828403121561361a575f80fd5b5f6060828403121561361a575f80fd5b5f805f805f805f805f6101008a8c0312156136f0575f80fd5b6136f98a61364e565b985060208a0135975060408a013567ffffffffffffffff8082111561371c575f80fd5b6137288d838e0161365e565b985060608c013591508082111561373d575f80fd5b6137498d838e0161366f565b909850965060808c0135915080821115613761575f80fd5b61376d8d838e016136b7565b955060a08c0135915080821115613782575f80fd5b61378e8d838e016136c7565b945060c08c01359150808211156137a3575f80fd5b6137af8d838e016136c7565b935060e08c01359150808211156137c4575f80fd5b506137d18c828d016136c7565b9150509295985092959850929598565b5f80604083850312156137f2575f80fd5b82356137fd8161363a565b9150602083013567ffffffffffffffff811115613818575f80fd5b613824858286016136b7565b9150509250929050565b5f610160828403121561361a575f80fd5b5f805f805f60a08688031215613853575f80fd5b853561385e8161363a565b9450602086013567ffffffffffffffff8082111561387a575f80fd5b61388689838a0161382e565b9550604088013591508082111561389b575f80fd5b6138a789838a016136c7565b94506060880135935060808801359150808211156138c3575f80fd5b506138d0888289016136c7565b9150509295509295909350565b5f602082840312156138ed575f80fd5b5035919050565b8015158114610c89575f80fd5b5f805f805f8060a08789031215613916575f80fd5b86356139218161363a565b955060208701356139318161363a565b94506040870135613941816138f4565b9350606087013567ffffffffffffffff8082111561395d575f80fd5b6139698a838b0161365e565b9450608089013591508082111561397e575f80fd5b5061398b89828a0161366f565b979a9699509497509295939492505050565b5f805f606084860312156139af575f80fd5b83356139ba8161363a565b925060208401359150604084013567ffffffffffffffff8111156139dc575f80fd5b6139e8868287016136c7565b9150509250925092565b5f60208284031215613a02575f80fd5b813567ffffffffffffffff811115613a18575f80fd5b611bd38482850161382e565b5f805f805f805f8060e0898b031215613a3b575f80fd5b613a448961364e565b975060208901359650604089013567ffffffffffffffff80821115613a67575f80fd5b613a738c838d0161365e565b975060608b0135915080821115613a88575f80fd5b613a948c838d0161366f565b909750955060808b0135915080821115613aac575f80fd5b613ab88c838d016136b7565b945060a08b0135915080821115613acd575f80fd5b613ad98c838d016136c7565b935060c08b0135915080821115613aee575f80fd5b50613afb8b828c016136c7565b9150509295985092959890939650565b5f805f805f8060c08789031215613b20575f80fd5b613b298761364e565b9550602087013567ffffffffffffffff80821115613b45575f80fd5b613b518a838b0161382e565b96506040890135915080821115613b66575f80fd5b613b728a838b016136c7565b9550606089013594506080890135915080821115613b8e575f80fd5b613b9a8a838b016136c7565b935060a0890135915080821115613baf575f80fd5b50613bbc89828a016136c7565b9150509295509295509295565b5f60208284031215613bd9575f80fd5b813567ffffffffffffffff811115613bef575f80fd5b611bd38482850161365e565b5f60208284031215613c0b575f80fd5b81516104d0816138f4565b5f60208284031215613c26575f80fd5b81356104d08161363a565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b803565ffffffffffff81168114613659575f80fd5b5f6001600160a01b0380871683528086166020840152508360408301526080606083015282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613ce2575f80fd5b830160208101903567ffffffffffffffff811115613cfe575f80fd5b803603821315613d0c575f80fd5b60606080850152613d2160e085018284613c31565b915050613d3060208501613c78565b65ffffffffffff80821660a086015280613d4c60408801613c78565b1660c086015250508091505095945050505050565b5f60208284031215613d71575f80fd5b8135600381106104d0575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613db2575f80fd5b83018035915067ffffffffffffffff821115613dcc575f80fd5b6020019150368190038213156136b0575f80fd5b818382375f9101908152919050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613e22575f80fd5b83018035915067ffffffffffffffff821115613e3c575f80fd5b6020019150600581901b36038213156136b0575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613eb2575f80fd5b9190910192915050565b80820180821115612efa577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208284031215613f31575f80fd5b8135600481106104d0575f80fd5b838152604060208201525f611c60604083018486613c31565b5f60208284031215613f68575f80fd5b81517fffffffff00000000000000000000000000000000000000000000000000000000811681146104d0575f80fd5b602081525f611bd3602083018486613c31565b5f81515f5b81811015613fc95760208185018101518683015201613faf565b505f93019283525090919050565b5f611bd3613fe58386613faa565b84613faa565b5f613ff68286613faa565b93845250506020820152604001919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f60a0820190506001600160a01b0380845116835280602085015116602084015280604085015116604084015250606083015160608301526080830151600381106140a7577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8060808401525092915050565b5f602082840312156140c4575f80fd5b5051919050565b5f80858511156140d9575f80fd5b838611156140e5575f80fd5b5050820193919092039150565b5f805f8060808587031215614105575f80fd5b84356141108161363a565b935060208501356141208161363a565b9250604085013591506060850135614137816138f4565b939692955090935050565b5f805f8060808587031215614155575f80fd5b84356141608161363a565b935060208501356141708161363a565b925060408501356141808161363a565b9396929550929360600135925050565b5f805f805f805f60e0888a0312156141a6575f80fd5b87356141b18161363a565b965060208801356141c18161363a565b955060408801356141d18161363a565b945060608801356141e18161363a565b93506080880135925060a08801356141f88161363a565b8092505060c0880135905092959891949750929550565b5f805f60608486031215614221575f80fd5b833561422c8161363a565b9250602084013561423c8161363a565b929592945050506040919091013590565b5f805f805f60a08688031215614261575f80fd5b853561426c8161363a565b9450602086013561427c8161363a565b9350604086013561428c8161363a565b92506060860135915060808601356142a3816138f4565b809150509295509295909350565b5f60ff8316806142e8577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff8416069150509291505056fea26469706673582212209be58acada353061a2a202cc7011f3c91393e0f2e305e9202445b042fc4a4ce664736f6c63430008170033",
+ "sourceMap": "975:10890:90:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7809:308;;;;;;;;;;-1:-1:-1;7809:308:90;;;;;:::i;:::-;;:::i;:::-;;;852:66:169;840:79;;;822:98;;810:2;795:18;7809:308:90;;;;;;;;1318:57;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1120:55:169;;;1102:74;;1090:2;1075:18;1318:57:90;931:251:169;6790:255:91;;;;;;;;;;;;;:::i;:::-;;;1333:25:169;;;1321:2;1306:18;6790:255:91;1187:177:169;5478:391:91;;;;;;;;;;-1:-1:-1;5478:391:91;;;;;:::i;:::-;;:::i;5859:1907:90:-;;;;;;:::i;:::-;;:::i;:::-;;14436:563:91;;;;;;;;;;-1:-1:-1;14436:563:91;;;;;:::i;:::-;;:::i;1440:48:90:-;;;;;;;;;;;;;;;5092:382:91;;;;;;;;;;-1:-1:-1;5092:382:91;;;;;:::i;:::-;;:::i;4627:523:90:-;;;;;;:::i;:::-;;:::i;4091:109:91:-;;;;;;;;;;-1:-1:-1;4091:109:91;;;;;:::i;:::-;;:::i;7272:1606::-;;;;;;;;;;-1:-1:-1;7272:1606:91;;;;;:::i;:::-;;:::i;15182:1005::-;;;;;;;;;;-1:-1:-1;15182:1005:91;;;;;:::i;:::-;;:::i;6025:761::-;;;;;;;;;;-1:-1:-1;6025:761:91;;;;;:::i;:::-;;:::i;1196:64:90:-;;;;;;;;;;;;;;;2894:1690;;;;;;;;;;-1:-1:-1;2894:1690:90;;;;;:::i;:::-;;:::i;5154:701::-;;;;;;:::i;:::-;;:::i;4336:752:91:-;;;;;;;;;;-1:-1:-1;4336:752:91;;;;;:::i;:::-;;:::i;13818:485::-;;;;;;;;;;-1:-1:-1;13818:485:91;;;;;:::i;:::-;;:::i;7809:308:90:-;7909:6;7923:23;7949:35;7966:5;7973:10;;7949:16;:35::i;:::-;7994:38;;;;;-1:-1:-1;;;;;1120:55:169;;;7994:38:90;;;1102:74:169;7923:61:90;;-1:-1:-1;7994:13:90;:21;;;;;;1075:18:169;;7994:38:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7990:123;;;1905:44:91;8042:26:90;;;;;7990:123;-1:-1:-1;8089:17:90;;-1:-1:-1;7809:308:90;;;;;;:::o;6790:255:91:-;6839:7;6878:16;6861:13;:33;:179;;6946:93;;;1026:66;6946:93;;;13746:25:169;879:32:91;13787:18:169;;;13780:34;;;;957:14:91;13830:18:169;;;13823:34;7010:13:91;13873:18:169;;;13866:34;7033:4:91;13916:19:169;;;13909:84;13718:19;;6946:93:91;;;;;;;;;;;;6936:104;;;;;;6854:186;;6790:255;:::o;6861:179::-;-1:-1:-1;6903:24:91;;6790:255::o;5478:391::-;5597:7;2314:68;5694:20;;;;:15;:20;:::i;:::-;5724:15;:22;;;5756:15;:24;;;5790:15;:26;;;5826:15;:24;;;5636:222;;;;;;;;;;;;14543:25:169;;;-1:-1:-1;;;;;14604:55:169;;;;14599:2;14584:18;;14577:83;14691:2;14676:18;;14669:34;;;;14734:2;14719:18;;14712:34;14777:3;14762:19;;14755:35;14821:3;14806:19;;14799:35;14530:3;14515:19;;14256:584;5636:222:91;;;;;;;;;;;;;5619:245;;;;;;5612:252;;5478:391;;;:::o;5859:1907:90:-;2500:21:44;:19;:21::i;:::-;6282:30:90::1;::::0;;;;-1:-1:-1;;;;;1120:55:169;;;6282:30:90::1;::::0;::::1;1102:74:169::0;6282:13:90::1;:21;::::0;::::1;::::0;1075:18:169;;6282:30:90::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6277:54;;6321:10;;;;;;;;;;;;;;6277:54;6366:30:::0;;;::::1;6406:22:::0;;;;;:80:::1;;-1:-1:-1::0;6454:32:90;;;::::1;6432:54:::0;::::1;;6406:80;6402:254;;;6516:133;6537:18:::0;6557:30;;;::::1;6589:32:::0;;;::::1;6623:18;6516:11;:133::i;:::-;6496:153;;6402:254;6662:130;6683:10;6695:7;6704:17;6723:6;6731:13;;6746:6;6754:15;6771;6662:13;:130::i;:::-;-1:-1:-1::0;;;;;6799:15:90::1;:28;;6835:22;::::0;;;::::1;::::0;::::1;;:::i;:::-;6859:25;::::0;;;:20:::1;::::0;::::1;:25;:::i;:::-;6886:32;6799:143:::0;;::::1;::::0;;;;;;::::1;::::0;;;6886:32;;;::::1;::::0;6920:16;;6799:143:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6949:357;6970:6;6984:7;6999:17;7024:18;7046:1;7024:23;:80;;;-1:-1:-1::0;7072:32:90;;;::::1;7051:53:::0;::::1;7024:80;:152;;7158:18;7024:152;;;7115:32:::0;;;::::1;7024:152;7184:6:::0;7198:13;;7219:42:::1;7269:31;::::0;;;::::1;::::0;::::1;;:::i;:::-;6949:13;:357::i;:::-;7336:12;;::::0;::::1;:6:::0;:12:::1;:::i;:::-;7318:443;;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;::::1;7356:13;::::0;;;::::1;::::0;::::1;;:::i;:::-;7377:22;::::0;;;::::1;::::0;::::1;;:::i;:::-;7407:25;::::0;;;:20:::1;::::0;::::1;:25;:::i;:::-;7440:26;::::0;;;:21:::1;::::0;::::1;:26;:::i;:::-;7474:23:::0;;;:80:::1;;-1:-1:-1::0;7522:32:90;;;::::1;7501:53:::0;::::1;7474:80;:147;;7603:18;7474:147;;;7565:27:::0;;;::::1;7474:147;7650:30:::0;;;::::1;7629:51:::0;::::1;:102;;7714:17;7629:102;;;7683:28:::0;;;::::1;7629:102;7739:6;:16;;;;;;;;;;:::i;:::-;7318:443;::::0;;-1:-1:-1;;;;;18257:15:169;;;18239:34;;18309:15;;;18304:2;18289:18;;18282:43;18361:15;;;18341:18;;;18334:43;;;;18413:15;;;18408:2;18393:18;;18386:43;18460:3;18445:19;;18438:35;18504:3;18489:19;;18482:35;18554:15;;;18548:3;18533:19;;18526:44;18165:3;18150:19;7318:443:90::1;;;;;;;6271:1495;2542:20:44::0;1857:1;3068:21;;2888:208;2542:20;5859:1907:90;;;;;;;;;:::o;14436:563:91:-;14546:9;14541:225;14561:19;:6;;:19;:::i;:::-;:26;;14557:1;:30;14541:225;;;14602:34;14639:19;:6;;:19;:::i;:::-;14659:1;14639:22;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;14602:59;-1:-1:-1;;;;;;14674:25:91;;;14700:11;;;;14602:59;14700:11;:::i;:::-;14674:38;;;;;;;;;;-1:-1:-1;;;;;1120:55:169;;;14674:38:91;;;1102:74:169;1075:18;;14674:38:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14670:90;;;14731:20;;;;;;;;;;;;;;14670:90;-1:-1:-1;14589:3:91;;14541:225;;;;14777:9;14772:223;14792:18;;;;:6;:18;:::i;:::-;:25;;14788:1;:29;14772:223;;;14832:34;14869:18;;;;:6;:18;:::i;:::-;14888:1;14869:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;14832:58;-1:-1:-1;;;;;;14903:25:91;;;14929:11;;;;14832:58;14929:11;:::i;:::-;14903:38;;;;;;;;;;-1:-1:-1;;;;;1120:55:169;;;14903:38:91;;;1102:74:169;1075:18;;14903:38:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14899:90;;;14960:20;;;;;;;;;;;;;;14899:90;-1:-1:-1;14819:3:91;;14772:223;;;;14436:563;;:::o;5092:382::-;5208:7;2182:67;5304:19;;;;:14;:19;:::i;4627:523:90:-;4876:62;4914:6;4922:15;4876:37;:62::i;:::-;4944:201;4971:7;4986:6;5000:15;5023:18;5049:41;5098;4944:19;:201::i;:::-;4627:523;;;;;:::o;4091:109:91:-;4155:40;4177:10;4189:5;4155:21;:40::i;:::-;4091:109;:::o;7272:1606::-;7498:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7498:27:91;7537:9;7532:1297;7548:24;;;7532:1297;;;7587:41;7631:13;;7645:1;7631:16;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;7587:60;-1:-1:-1;7655:23:91;;7681:20;;;;7587:60;7681:20;:::i;:::-;7655:46;;-1:-1:-1;7655:46:91;-1:-1:-1;;;;;;7714:25:91;;;7740:18;;;;:11;:18;:::i;:::-;7714:45;;;;;;;;;;-1:-1:-1;;;;;1120:55:169;;;7714:45:91;;;1102:74:169;1075:18;;7714:45:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7710:1113;;;7771:10;7796:14;7792:52;;;7819:25;;;;;;;;;;;;;;7792:52;7878:1;7859:20;;7855:119;;-1:-1:-1;7923:29:91;;7855:119;7988:33;;;;;7984:831;;8049:45;8068:8;;8078:7;8087:6;8049:18;:45::i;:::-;8035:1;:10;;:59;;;;;;;:::i;:::-;;;-1:-1:-1;7984:831:91;;;8115:33;;;;;8111:704;;8176:45;8195:8;;8205:7;8214:6;8176:18;:45::i;:::-;8162:1;:10;;:59;;;;;;;:::i;8111:704::-;8242:39;;;;;8238:577;;8340:50;8364:8;;8374:7;8383:6;8340:23;:50::i;:::-;8317:19;;;8295:95;8296:19;;;8295:95;;;8402:10;;;:33;;;;8295:95;;8402:33;:::i;:::-;;;-1:-1:-1;8461:19:91;;;;8447:10;;;:33;;;;8461:19;;8447:33;:::i;8238:577::-;8501:32;;;;;8497:318;;8560:44;8578:8;;8588:7;8597:6;8560:17;:44::i;:::-;8547:57;;:1;;:57;;;;;:::i;8497:318::-;8625:35;;;;;8621:194;;8690:47;8711:8;;8721:7;8730:6;8690:20;:47::i;:::-;8674:1;:12;;:63;;;;;;;:::i;8621:194::-;8773:31;;;;;;;;;;;;;;8621:194;7761:1062;7710:1113;7579:1250;;;7574:3;;;;;7532:1297;;;;8835:38;8863:6;8871:1;8835:27;:38::i;:::-;7492:1386;7272:1606;;;;;;:::o;15182:1005::-;15364:21;15336:24;;;;:10;:24;:::i;:::-;:49;;;;;;;;:::i;:::-;;15332:851;;-1:-1:-1;;;;;15399:72:91;;:50;15416:5;15423:25;;;;:10;:25;:::i;:::-;15399:16;:50::i;:::-;-1:-1:-1;;;;;15399:72:91;;15395:128;;15490:24;;;;;;;;;;;;;;15332:851;15567:22;15539:24;;;;:10;:24;:::i;:::-;:50;;;;;;;;:::i;:::-;;15535:648;;15655:20;15599:19;15645:31;;;15692:2;15685:17;;;15739:2;15726:16;;-1:-1:-1;;;;;15761:78:91;;:56;15726:16;15791:25;;;;:10;:25;:::i;15761:56::-;-1:-1:-1;;;;;15761:78:91;;15757:135;;15858:25;;;;;;;;;;;;;;15757:135;15591:307;14772:223;14436:563;;:::o;15535:648::-;15936:22;15908:24;;;;:10;:24;:::i;:::-;:50;;;;;;;;:::i;:::-;;15904:279;;15972:102;-1:-1:-1;;;;;15972:45:91;;;16018:5;16025:25;;;;:10;:25;:::i;:::-;15972:79;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:102;;;15968:159;;16093:25;;;;;;;;;;;;;;15904:279;16154:22;;;;;;;;;;;;;;6025:761;6124:7;6209:18;:16;:18::i;:::-;2011:107;6381:12;:6;;:12;:::i;:::-;6370:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6360:35;;;;;;6397:6;:12;;;6411:6;:13;;;;;;;;;;:::i;:::-;6323:102;;;;;;22262:25:169;;;;22303:18;;22296:34;;;;22346:18;;;22339:34;-1:-1:-1;;;;;22409:55:169;22389:18;;;22382:83;22234:19;;6323:102:91;;;;;;;;;;;;;6465:22;;;;;;;;:::i;:::-;6503:16;;;;;;;;:::i;:::-;6535:17;;;;;;;;:::i;:::-;6568:22;;;;6606:23;;;;6645:20;;;;6681:18;;;;6715:16;;;;;;;;:::i;:::-;6439:306;;;-1:-1:-1;;;;;22898:15:169;;;6439:306:91;;;22880:34:169;22950:15;;;22930:18;;;22923:43;23002:15;;;22982:18;;;22975:43;23034:18;;;23027:34;;;;23077:19;;;23070:35;;;;23121:19;;;23114:35;23165:19;;;23158:35;23230:15;;;23209:19;;;23202:44;22791:19;;6439:306:91;;;;;;;;;;;;;;6258:499;;;6439:306;6258:499;;:::i;:::-;;;;;;;;;;;;;6237:530;;;;;;6163:612;;;;;;;;24120:66:169;24108:79;;24212:1;24203:11;;24196:27;;;;24248:2;24239:12;;24232:28;24285:2;24276:12;;23850:444;2894:1690:90;2500:21:44;:19;:21::i;:::-;2266:34:90::1;::::0;;;;2289:10:::1;2266:34;::::0;::::1;1102:74:169::0;2266:13:90::1;-1:-1:-1::0;;;;;2266:22:90::1;::::0;::::1;::::0;1075:18:169;;2266:34:90::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2261:59;;2309:11;;;;;;;;;;;;;;2261:59;3251:30:::2;::::0;;;;-1:-1:-1;;;;;1120:55:169;;;3251:30:90::2;::::0;::::2;1102:74:169::0;3251:13:90::2;:21;::::0;::::2;::::0;1075:18:169;;3251:30:90::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3246:54;;3290:10;;;;;;;;;;;;;;3246:54;3335:30:::0;;;::::2;3375:22:::0;;;;;:80:::2;;-1:-1:-1::0;3423:32:90;;;::::2;3401:54:::0;::::2;;3375:80;3371:254;;;3485:133;3506:18:::0;3526:30;;;::::2;3558:32:::0;;;::::2;3592:18;3485:11;:133::i;:::-;3465:153;;3371:254;3631:130;3652:10;3664:7;3673:17;3692:6;3700:13;;3715:6;3723:15;3740;3631:13;:130::i;:::-;3768:356;3789:6:::0;3803:7;3818:17;3843:23;;;:80:::2;;-1:-1:-1::0;3891:32:90;;;::::2;3870:53:::0;::::2;3843:80;:152;;3977:18;3843:152;;;3934:32:::0;;;::::2;3843:152;4003:6:::0;4017:13;;4038:41:::2;4087:31;::::0;;;::::2;::::0;::::2;;:::i;3768:356::-;4154:12;;::::0;::::2;:6:::0;:12:::2;:::i;:::-;4136:443;;;;;;;:::i;:::-;;::::0;;;;::::2;::::0;;::::2;4174:13;::::0;;;::::2;::::0;::::2;;:::i;:::-;4195:22;::::0;;;::::2;::::0;::::2;;:::i;:::-;4225:25;::::0;;;:20:::2;::::0;::::2;:25;:::i;:::-;4258:26;::::0;;;:21:::2;::::0;::::2;:26;:::i;:::-;4292:23:::0;;;:80:::2;;-1:-1:-1::0;4340:32:90;;;::::2;4319:53:::0;::::2;4292:80;:147;;4421:18;4292:147;;;4383:27:::0;;;::::2;4292:147;4468:30:::0;;;::::2;4447:51:::0;::::2;:102;;4532:17;4447:102;;;4501:28:::0;;;::::2;4447:102;4557:6;:16;;;;;;;;;;:::i;:::-;4136:443;::::0;;-1:-1:-1;;;;;18257:15:169;;;18239:34;;18309:15;;;18304:2;18289:18;;18282:43;18361:15;;;18341:18;;;18334:43;;;;18413:15;;;18408:2;18393:18;;18386:43;18460:3;18445:19;;18438:35;18504:3;18489:19;;18482:35;18554:15;;;18548:3;18533:19;;18526:44;18165:3;18150:19;4136:443:90::2;;;;;;;3240:1344;2542:20:44::0;1857:1;3068:21;;2888:208;2542:20;2894:1690:90;;;;;;;;:::o;5154:701::-;5472:62;5510:6;5518:15;5472:37;:62::i;:::-;-1:-1:-1;;;;;5540:15:90;:28;;5569:22;;;;;;;;:::i;:::-;5593:16;;;;;;;;:::i;:::-;5611:6;:22;;;5635:16;5540:112;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5658:192;5685:7;5700:6;5714:15;5737:18;5763:42;5813:15;:31;;;;;;;;;;:::i;:::-;5658:19;:192::i;:::-;5154:701;;;;;;:::o;4336:752:91:-;4428:7;4513:18;:16;:18::i;:::-;2439:220;4714:12;;;;:6;:12;:::i;:::-;4703:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;4693:35;;4703:24;4693:35;;;;4744:12;;;;4772:13;;;;;;;;:::i;:::-;4801:22;;;;;;;;:::i;:::-;4839:18;;;;4873:16;;;;;;;;:::i;:::-;4627:312;;;;;;24642:25:169;;;;24683:18;;24676:34;;;;24726:18;;;24719:34;;;;-1:-1:-1;;;;;24850:15:169;;;24830:18;;;24823:43;24903:15;;24882:19;;;24875:44;24935:19;;;24928:35;;;;25000:15;24979:19;;;24972:44;4905:20:91;;;;;25032:19:169;;;25025:35;24614:19;;4627:312:91;;;;;;;;;;;;4953:39;4971:6;:20;;4953:17;:39::i;:::-;5006:41;5025:6;:21;;5006:18;:41::i;:::-;4562:497;;;;;;;;;;:::i;13818:485::-;14034:29;;;;13968:63;14003:28;;;;13968:32;;;;:63;:::i;:::-;:95;;;;:::i;:::-;13929:27;;;;:134;13918:184;;14077:25;;;;;;;;;;;;;;13918:184;14228:30;;;;14160:65;14193:32;;;;14160:30;;;;:65;:::i;:::-;:98;;;;:::i;:::-;14120:28;;;;:138;14109:189;;14272:26;;;;;;;;;;;;;;16423:233;16514:7;16529:14;16546:32;16560:5;16567:10;;16546:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16546:13:91;;-1:-1:-1;;;16546:32:91:i;:::-;16529:49;-1:-1:-1;;;;;;16588:20:91;;16584:48;;16617:15;;;;;;;;;;;;;;16584:48;16645:6;16423:233;-1:-1:-1;;;;16423:233:91:o;2575:307:44:-;1899:1;2702:7;;:18;2698:86;;2743:30;;;;;;;;;;;;;;2698:86;1899:1;2858:7;:17;2575:307::o;9351:238:48:-;9452:7;9506:76;9522:26;9539:8;9522:16;:26::i;:::-;:59;;;;;9580:1;9565:11;9552:25;;;;;:::i;:::-;9562:1;9559;9552:25;:29;9522:59;34914:9:49;34907:17;;34795:145;9506:76:48;9478:25;9485:1;9488;9491:11;9478:6;:25::i;:::-;:104;;;;:::i;:::-;9471:111;9351:238;-1:-1:-1;;;;;9351:238:48:o;17073:1250:91:-;17445:17;17465;17475:6;17465:9;:17::i;:::-;17445:37;;17488:54;17506:7;17515:9;17526:15;17488:17;:54::i;:::-;17567:22;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17553:36:91;:10;-1:-1:-1;;;;;17553:36:91;;17549:223;;17599:69;17617:22;;;;;;;;:::i;:::-;17641:9;17652:15;17599:17;:69::i;:::-;17549:223;;;17693:30;;;;:15;:30;:::i;:::-;:37;;17734:1;17693:42;17689:76;;17744:21;;;;;;;;;;;;;;17689:76;17777:59;17799:22;;;;;;;;:::i;:::-;17823:6;:12;;;17777:21;:59::i;:::-;17865:6;:18;;;17847:15;:36;17843:69;;;17892:20;;;;;;;;;;;;;;17843:69;17939:1;17922:14;:18;:61;;;;;17962:6;:20;;;17945:14;:37;17922:61;17918:93;;;17992:19;;;;;;;;;;;;;;17918:93;18018:28;18039:6;18018:20;:28::i;:::-;18053:34;18067:11;18080:6;18053:13;:34::i;:::-;18094:173;18122:11;18141:7;18173:1;18156:14;:18;:70;;;;-1:-1:-1;18196:30:91;;;;18178:48;;;18156:70;18234:6;18248:13;;18094:20;:173::i;:::-;18274:44;18296:7;18305:6;:12;;;18274:21;:44::i;:::-;17439:884;17073:1250;;;;;;;;;:::o;8812:1368:90:-;9164:40;9184:19;:6;;:19;:::i;:::-;9164;:40::i;:::-;9211:23;9237:60;9269:28;;;;9237:29;;;;:60;:::i;:::-;9211:86;;9304:15;-1:-1:-1;;;;;9304:30:90;;9342:150;;;;;;;;9380:6;:22;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9342:150:90;;;;;9412:4;-1:-1:-1;;;;;9342:150:90;;;;;9419:6;:20;;:25;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9342:150:90;;;;;9446:15;9342:150;;;;9463:21;9342:150;;;;;;;;:::i;:::-;;;;9304:194;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9505:15;-1:-1:-1;;;;;9505:30:90;;9543:155;;;;;;;;9581:6;:22;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9543:155:90;;;;;9605:6;:16;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9543:155:90;;;;;9623:6;:20;;:25;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9543:155:90;;;;;9650:17;9543:155;;;;9669:21;9543:155;;;;;;;;:::i;:::-;;;;9505:199;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9711:34;9731:13;;9711:19;:34::i;:::-;9752:15;-1:-1:-1;;;;;9752:30:90;;9790:138;;;;;;;;9828:7;-1:-1:-1;;;;;9790:138:90;;;;;9837:6;:13;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9790:138:90;;;;;9852:6;:21;;:26;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9790:138:90;;;;;9880:17;9790:138;;;;9899:21;9790:138;;;;;;;;:::i;:::-;;;;9752:182;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9941:39:90;;-1:-1:-1;9961:18:90;;-1:-1:-1;;9961:18:90;;;:6;:18;:::i;9941:39::-;9987:15;10012:25;;;;:20;;;:25;:::i;:::-;10005:58;;;;;10057:4;10005:58;;;1102:74:169;-1:-1:-1;;;;;10005:43:90;;;;;;;1075:18:169;;10005:58:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9987:76;-1:-1:-1;10074:12:90;;10070:106;;10096:73;10143:16;;;;;;;;:::i;:::-;10161:7;10103:6;:20;;:25;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10096:46:90;;:73;:46;:73::i;:::-;9158:1022;;8812:1368;;;;;;;;;:::o;18485:482:91:-;18673:22;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18659:36:91;:10;-1:-1:-1;;;;;18659:36:91;;18655:237;;18705:83;18723:22;;;;;;;;:::i;:::-;18747:23;18763:6;18747:15;:23::i;:::-;18772:15;18705:17;:83::i;:::-;18655:237;;;18813:30;;;;:15;:30;:::i;:::-;:37;;18854:1;18813:42;18809:76;;18864:21;;;;;;;;;;;;;;18809:76;18897:65;18925:22;;;;;;;;:::i;:::-;18949:6;:12;;;18897:27;:65::i;:::-;18485:482;;:::o;10379:1484:90:-;10694:23;;;;10727;;;;;:70;;;10775:6;:22;;;10754:18;:43;10727:70;10723:216;;;10832:100;10844:18;10864:6;:23;;;10889:6;:22;;;10913:18;10832:11;:100::i;:::-;10807:125;;10723:216;10945:70;10966:7;10975:14;10991:6;10999:15;10945:20;:70::i;:::-;11022:15;-1:-1:-1;;;;;11022:30:90;;11060:297;;;;;;;;11098:6;:22;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11060:297:90;;;;;11130:16;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11060:297:90;;;;;11156:16;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11060:297:90;;;;;11182:23;;;:70;;;11230:6;:22;;;11209:18;:43;11182:70;:136;;11300:18;11182:136;;;11265:6;:22;;;11182:136;11060:297;;;;11328:21;11060:297;;;;;;;;:::i;:::-;;;;11022:341;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11370:15;-1:-1:-1;;;;;11370:30:90;;11408:110;;;;;;;;11437:7;-1:-1:-1;;;;;11408:110:90;;;;;11446:6;:13;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11408:110:90;;;;;11461:17;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11408:110:90;;;;;11480:14;11408:110;;;;11496:21;11408:110;;;;;;;;:::i;:::-;;;;11370:154;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11554:12:90;;-1:-1:-1;11554:6:90;;-1:-1:-1;11554:6:90;;-1:-1:-1;11554:12:90;:::i;:::-;11536:322;;;;;;;:::i;:::-;;;;;;;;;11574:6;:13;;;;;;;;;;:::i;:::-;11595:22;;;;;;;;:::i;:::-;11625:16;;;;;;;;:::i;:::-;11649:17;;;;;;;;:::i;:::-;11674:23;;;:70;;;11722:6;:22;;;11701:18;:43;11674:70;:132;;11788:18;11674:132;;;11755:6;:22;;;11674:132;11814:14;11836:6;:16;;;;;;;;;;:::i;:::-;11536:322;;;-1:-1:-1;;;;;18257:15:169;;;18239:34;;18309:15;;;18304:2;18289:18;;18282:43;18361:15;;;18341:18;;;18334:43;;;;18413:15;;;18408:2;18393:18;;18386:43;18460:3;18445:19;;18438:35;18504:3;18489:19;;18482:35;18554:15;;;18548:3;18533:19;;18526:44;18165:3;18150:19;11536:322:90;;;;;;;10663:1200;10379:1484;;;;;;:::o;20053:172:91:-;-1:-1:-1;;;;;20136:16:91;;:7;:16;;;;;;;;;;;:24;;;;;;;;;;;20132:51;;;20169:14;;;;;;;;;;;;;;20132:51;-1:-1:-1;;;;;20189:16:91;;;:7;:16;;;;;;;;;;;:24;;;;;;;:31;;;;20216:4;20189:31;;;20053:172::o;9090:497::-;9242:7;;;;9321:12;:8;9330:1;9321:8;;:12;:::i;:::-;9310:59;;;;;;;:::i;:::-;-1:-1:-1;9257:112:91;;-1:-1:-1;9257:112:91;-1:-1:-1;9257:112:91;-1:-1:-1;9388:25:91;;;;:20;;;:25;:::i;:::-;-1:-1:-1;;;;;9379:34:91;:5;-1:-1:-1;;;;;9379:34:91;;9375:61;;9422:14;;;;;;;;;;;;;;9375:61;9457:8;-1:-1:-1;;;;;9446:19:91;:7;-1:-1:-1;;;;;9446:19:91;;9442:47;;9474:15;;;;;;;;;;;;;;9442:47;9509:29;;;;9499:39;;9495:67;;9547:15;;;;;;;;;;;;;;9495:67;9576:6;9090:497;-1:-1:-1;;;;;;;9090:497:91:o;9799:589::-;9951:7;;;;;10053:12;:8;10062:1;10053:8;;:12;:::i;:::-;10042:62;;;;;;;:::i;:::-;9966:138;;-1:-1:-1;9966:138:91;;-1:-1:-1;9966:138:91;-1:-1:-1;9966:138:91;-1:-1:-1;10123:26:91;;;;:21;;;:26;:::i;:::-;-1:-1:-1;;;;;10114:35:91;:5;-1:-1:-1;;;;;10114:35:91;;10110:62;;10158:14;;;;;;;;;;;;;;10110:62;10193:8;-1:-1:-1;;;;;10182:19:91;:7;-1:-1:-1;;;;;10182:19:91;;10178:47;;10210:15;;;;;;;;;;;;;;10178:47;10247:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10235:25:91;:8;-1:-1:-1;;;;;10235:25:91;;10231:58;;10269:20;;;;;;;;;;;;;;10231:58;10309:30;;;;10299:40;;10295:68;;10348:15;;;;;;;;;;;;;;10295:68;10377:6;9799:589;-1:-1:-1;;;;;;;;9799:589:91:o;10633:953::-;10790:7;10799;10822:13;10843:16;10867:14;10889:17;10914:14;10936:18;10962:19;11001:8;;11010:1;11001:12;;;;;;;;;:::i;:::-;10990:89;;;;;;;:::i;:::-;10814:265;;-1:-1:-1;10814:265:91;;-1:-1:-1;10814:265:91;;-1:-1:-1;10814:265:91;-1:-1:-1;10814:265:91;-1:-1:-1;10814:265:91;-1:-1:-1;10814:265:91;-1:-1:-1;11098:26:91;;;;:21;;;:26;:::i;:::-;-1:-1:-1;;;;;11089:35:91;:5;-1:-1:-1;;;;;11089:35:91;;11085:62;;11133:14;;;;;;;;;;;;;;11085:62;11168:8;-1:-1:-1;;;;;11157:19:91;:7;-1:-1:-1;;;;;11157:19:91;;11153:47;;11185:15;;;;;;;;;;;;;;11153:47;-1:-1:-1;;;;;11210:23:91;;11228:4;11210:23;11206:51;;11242:15;;;;;;;;;;;;;;11206:51;11280:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11267:26:91;:9;-1:-1:-1;;;;;11267:26:91;;11263:59;;11302:20;;;;;;;;;;;;;;11263:59;11342:30;;;;11332:40;;11328:68;;11381:15;;;;;;;;;;;;;;11328:68;11420:25;;;;:20;;;:25;:::i;:::-;-1:-1:-1;;;;;11406:39:91;:10;-1:-1:-1;;;;;11406:39:91;;11402:66;;11454:14;;;;;;;;;;;;;;11402:66;11493:29;;;;11478:44;;11474:72;;11531:15;;;;;;;;;;;;;;11474:72;11561:6;;;;-1:-1:-1;10633:953:91;;-1:-1:-1;;;;;;;;;;10633:953:91:o;11796:488::-;11947:7;;;;12025:12;:8;12034:1;12025:8;;:12;:::i;:::-;12014:53;;;;;;;:::i;:::-;11962:105;;-1:-1:-1;11962:105:91;-1:-1:-1;11962:105:91;-1:-1:-1;12086:25:91;;;;:20;;;:25;:::i;:::-;-1:-1:-1;;;;;12077:34:91;:5;-1:-1:-1;;;;;12077:34:91;;12073:61;;12120:14;;;;;;;;;;;;;;12073:61;12155:8;-1:-1:-1;;;;;12144:19:91;:7;-1:-1:-1;;;;;12144:19:91;;12140:47;;12172:15;;;;;;;;;;;;;;12140:47;12207:28;;;;12197:38;;12193:66;;12244:15;;;;;;;;;;;;;;12500:602;12654:7;;;;;12758:12;:8;12767:1;12758:8;;:12;:::i;:::-;12747:68;;;;;;;:::i;:::-;-1:-1:-1;12669:146:91;;-1:-1:-1;12669:146:91;;-1:-1:-1;12669:146:91;-1:-1:-1;12669:146:91;-1:-1:-1;12834:26:91;;;;:21;;;:26;:::i;:::-;-1:-1:-1;;;;;12825:35:91;:5;-1:-1:-1;;;;;12825:35:91;;12821:62;;12869:14;;;;;;;;;;;;;;12821:62;12904:9;-1:-1:-1;;;;;12893:20:91;:7;-1:-1:-1;;;;;12893:20:91;;12889:48;;12922:15;;;;;;;;;;;;;;12889:48;12959:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12947:25:91;:8;-1:-1:-1;;;;;12947:25:91;;12943:58;;12981:20;;;;;;;;;;;;;;12943:58;13021:32;;;;13011:42;;13007:70;;13062:15;;;;;;;;;;;;;;13259:466;13404:9;;13417:28;;;;13404:41;;;:88;;-1:-1:-1;13449:10:91;;;;13463:29;;;;13449:43;;13404:88;13400:153;;;13509:37;;;;;;;;;;;;;;13400:153;13563:12;;;;13579:32;;;;13563:48;;;:96;;-1:-1:-1;13615:10:91;;;;13629:30;;;;13615:44;;13563:96;13559:162;;;13676:38;;;;;;;;;;;;;;3714:255:45;3792:7;3812:17;3831:18;3851:16;3871:27;3882:4;3888:9;3871:10;:27::i;:::-;3811:87;;;;;;3908:28;3920:5;3927:8;3908:11;:28::i;:::-;-1:-1:-1;3953:9:45;;-1:-1:-1;;3714:255:45;;;;;:::o;29533:122:48:-;29601:4;29642:1;29630:8;29624:15;;;;;;;;:::i;:::-;:19;;;;:::i;:::-;:24;;29647:1;29624:24;29617:31;;29533:122;;;:::o;4996:4226::-;5078:14;5449:5;;;5078:14;5634:6;5453:1;5449;5621:20;5694:5;5690:2;5687:13;5679:5;5675:2;5671:14;5667:34;5658:43;;;5796:5;5805:1;5796:10;5792:368;;6134:11;6126:5;:19;;;;;:::i;:::-;;6119:26;;;;;;5792:368;6285:5;6270:11;:20;6266:143;;6310:84;3066:5;6330:16;;3065:36;940:4:43;3060:42:48;6310:11;:84::i;:::-;6664:17;6799:11;6796:1;6793;6786:25;7199:12;7229:15;;;7214:31;;7348:22;;;;;8094:1;8075;:15;;8074:21;;8327;;;8323:25;;8312:36;8397:21;;;8393:25;;8382:36;8469:21;;;8465:25;;8454:36;8540:21;;;8536:25;;8525:36;8613:21;;;8609:25;;8598:36;8687:21;;;8683:25;;;8672:36;7597:12;;;;7593:23;;;7618:1;7589:31;6913:20;;;6902:32;;;7709:12;;;;6960:21;;;;7446:16;;;;7700:21;;;;9163:15;;;;;-1:-1:-1;;4996:4226:48;;;;;:::o;8348:460:90:-;8452:9;8447:357;8463:24;;;8447:357;;;8502:41;8546:13;;8560:1;8546:16;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;8502:60;-1:-1:-1;;;;;;8605:15:90;8575:46;:18;;;;8502:60;8575:18;:::i;:::-;-1:-1:-1;;;;;8575:46:90;;8571:79;;8630:20;;;;;;;;;;;;;;8571:79;8658:36;8682:11;8658:23;:36::i;:::-;8720:18;;;;:11;:18;:::i;:::-;-1:-1:-1;;;;;8708:89:90;;8740:11;:17;;;8759:37;8784:11;8759:24;:37::i;:::-;8708:89;;;30953:25:169;;;31026:66;31014:79;;;31009:2;30994:18;;30987:107;30926:18;8708:89:90;;;;;;;-1:-1:-1;8489:3:90;;8447:357;;1219:160:39;1328:43;;;-1:-1:-1;;;;;31297:55:169;;1328:43:39;;;31279:74:169;31369:18;;;;31362:34;;;1328:43:39;;;;;;;;;;31252:18:169;;;;1328:43:39;;;;;;;;;;;;;;1301:71;;1321:5;;1301:19;:71::i;19109:500:91:-;19332:1;19315:14;:18;:61;;;;;19355:6;:20;;;19338:14;:37;19315:61;19311:93;;;19385:19;;;;;;;;;;;;;;19311:93;19410:68;19428:7;19437:23;19453:6;19437:15;:23::i;19410:68::-;19484:50;19512:7;19521:6;:12;;;19484:27;:50::i;:::-;19566:15;19544:6;:18;;;:37;19540:64;;19590:14;;;;;;;;;;;;;;2129:778:45;2232:17;2251:16;2269:14;2299:9;:16;2319:2;2299:22;2295:606;;2604:4;2589:20;;2583:27;2653:4;2638:20;;2632:27;2710:4;2695:20;;2689:27;2337:9;2681:36;2751:25;2762:4;2681:36;2583:27;2632;2751:10;:25::i;:::-;2744:32;;;;;;;;;;;2295:606;-1:-1:-1;;2872:16:45;;2823:1;;-1:-1:-1;2827:35:45;;2295:606;2129:778;;;;;:::o;7280:532::-;7375:20;7366:5;:29;;;;;;;;:::i;:::-;;7362:444;;7280:532;;:::o;7362:444::-;7471:29;7462:5;:38;;;;;;;;:::i;:::-;;7458:348;;7523:23;;;;;;;;;;;;;;7458:348;7576:35;7567:5;:44;;;;;;;;:::i;:::-;;7563:243;;7634:46;;;;;;;;1333:25:169;;;1306:18;;7634:46:45;;;;;;;;7563:243;7710:30;7701:5;:39;;;;;;;;:::i;:::-;;7697:109;;7763:32;;;;;;;;1333:25:169;;;1306:18;;7763:32:45;1187:177:169;1776:194:43;1881:10;1875:4;1868:24;1918:4;1912;1905:18;1949:4;1943;1936:18;582:989:72;649:14;666:18;;;;:11;:18;:::i;:::-;649:35;-1:-1:-1;706:17:72;;;;729:23;690:13;755:20;;;;706:11;755:20;:::i;:::-;729:46;;;;1305:4;1299:11;1366:15;1349;1330:17;1317:65;1465:1;1462;1445:15;1426:17;1419:5;1411:6;1404:5;1399:68;1389:172;;1500:16;1497:1;1494;1479:38;1536:16;1533:1;1526:27;1798:809;1874:13;1895:23;1874:13;1921:20;;;;:11;:20;:::i;:::-;1895:46;;-1:-1:-1;1895:46:72;-1:-1:-1;1970:1:72;1951:20;;1947:656;;2573:15;2560:29;2550:39;;1947:656;1889:718;;1798:809;;;:::o;8370:720:39:-;8450:18;8478:19;8616:4;8613:1;8606:4;8600:11;8593:4;8587;8583:15;8580:1;8573:5;8566;8561:60;8673:7;8663:176;;8717:4;8711:11;8762:16;8759:1;8754:3;8739:40;8808:16;8803:3;8796:29;8663:176;-1:-1:-1;;8916:1:39;8910:8;8866:16;;-1:-1:-1;8942:15:39;;:68;;8994:11;9009:1;8994:16;;8942:68;;;-1:-1:-1;;;;;8960:26:39;;;:31;8942:68;8938:146;;;9033:40;;;;;-1:-1:-1;;;;;1120:55:169;;9033:40:39;;;1102:74:169;1075:18;;9033:40:39;931:251:169;5203:1551:45;5329:17;;;6283:66;6270:79;;6266:164;;;-1:-1:-1;6381:1:45;;-1:-1:-1;6385:30:45;;-1:-1:-1;6417:1:45;6365:54;;6266:164;6541:24;;;6524:14;6541:24;;;;;;;;;31816:25:169;;;31889:4;31877:17;;31857:18;;;31850:45;;;;31911:18;;;31904:34;;;31954:18;;;31947:34;;;6541:24:45;;31788:19:169;;6541:24:45;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6541:24:45;;;;;;-1:-1:-1;;;;;;;6579:20:45;;6575:113;;-1:-1:-1;6631:1:45;;-1:-1:-1;6635:29:45;;-1:-1:-1;6631:1:45;;-1:-1:-1;6615:62:45;;6575:113;6706:6;-1:-1:-1;6714:20:45;;-1:-1:-1;6714:20:45;;-1:-1:-1;5203:1551:45;;;;;;;;;:::o;14:659:169:-;93:6;101;109;162:2;150:9;141:7;137:23;133:32;130:52;;;178:1;175;168:12;130:52;214:9;201:23;191:33;;275:2;264:9;260:18;247:32;298:18;339:2;331:6;328:14;325:34;;;355:1;352;345:12;325:34;393:6;382:9;378:22;368:32;;438:7;431:4;427:2;423:13;419:27;409:55;;460:1;457;450:12;409:55;500:2;487:16;526:2;518:6;515:14;512:34;;;542:1;539;532:12;512:34;587:7;582:2;573:6;569:2;565:15;561:24;558:37;555:57;;;608:1;605;598:12;555:57;639:2;635;631:11;621:21;;661:6;651:16;;;;;14:659;;;;;:::o;1369:163::-;1436:5;1481:3;1472:6;1467:3;1463:16;1459:26;1456:46;;;1498:1;1495;1488:12;1456:46;-1:-1:-1;1520:6:169;1369:163;-1:-1:-1;1369:163:169:o;1537:254::-;1631:6;1684:3;1672:9;1663:7;1659:23;1655:33;1652:53;;;1701:1;1698;1691:12;1652:53;1724:61;1777:7;1766:9;1724:61;:::i;1796:154::-;-1:-1:-1;;;;;1875:5:169;1871:54;1864:5;1861:65;1851:93;;1940:1;1937;1930:12;1955:134;2023:20;;2052:31;2023:20;2052:31;:::i;:::-;1955:134;;;:::o;2094:154::-;2152:5;2197:3;2188:6;2183:3;2179:16;2175:26;2172:46;;;2214:1;2211;2204:12;2253:380;2329:8;2339:6;2393:3;2386:4;2378:6;2374:17;2370:27;2360:55;;2411:1;2408;2401:12;2360:55;-1:-1:-1;2434:20:169;;2477:18;2466:30;;2463:50;;;2509:1;2506;2499:12;2463:50;2546:4;2538:6;2534:17;2522:29;;2606:3;2599:4;2589:6;2586:1;2582:14;2574:6;2570:27;2566:38;2563:47;2560:67;;;2623:1;2620;2613:12;2560:67;2253:380;;;;;:::o;2638:153::-;2696:5;2741:2;2732:6;2727:3;2723:16;2719:25;2716:45;;;2757:1;2754;2747:12;2796:162;2863:5;2908:2;2899:6;2894:3;2890:16;2886:25;2883:45;;;2924:1;2921;2914:12;2963:1853;3295:6;3303;3311;3319;3327;3335;3343;3351;3359;3412:3;3400:9;3391:7;3387:23;3383:33;3380:53;;;3429:1;3426;3419:12;3380:53;3452:29;3471:9;3452:29;:::i;:::-;3442:39;;3528:2;3517:9;3513:18;3500:32;3490:42;;3583:2;3572:9;3568:18;3555:32;3606:18;3647:2;3639:6;3636:14;3633:34;;;3663:1;3660;3653:12;3633:34;3686:65;3743:7;3734:6;3723:9;3719:22;3686:65;:::i;:::-;3676:75;;3804:2;3793:9;3789:18;3776:32;3760:48;;3833:2;3823:8;3820:16;3817:36;;;3849:1;3846;3839:12;3817:36;3888:85;3965:7;3954:8;3943:9;3939:24;3888:85;:::i;:::-;3992:8;;-1:-1:-1;3862:111:169;-1:-1:-1;4080:3:169;4065:19;;4052:33;;-1:-1:-1;4097:16:169;;;4094:36;;;4126:1;4123;4116:12;4094:36;4149:67;4208:7;4197:8;4186:9;4182:24;4149:67;:::i;:::-;4139:77;;4269:3;4258:9;4254:19;4241:33;4225:49;;4299:2;4289:8;4286:16;4283:36;;;4315:1;4312;4305:12;4283:36;4338:76;4406:7;4395:8;4384:9;4380:24;4338:76;:::i;:::-;4328:86;;4467:3;4456:9;4452:19;4439:33;4423:49;;4497:2;4487:8;4484:16;4481:36;;;4513:1;4510;4503:12;4481:36;4536:76;4604:7;4593:8;4582:9;4578:24;4536:76;:::i;:::-;4526:86;;4665:3;4654:9;4650:19;4637:33;4621:49;;4695:2;4685:8;4682:16;4679:36;;;4711:1;4708;4701:12;4679:36;;4734:76;4802:7;4791:8;4780:9;4776:24;4734:76;:::i;:::-;4724:86;;;2963:1853;;;;;;;;;;;:::o;4821:509::-;4936:6;4944;4997:2;4985:9;4976:7;4972:23;4968:32;4965:52;;;5013:1;5010;5003:12;4965:52;5052:9;5039:23;5071:31;5096:5;5071:31;:::i;:::-;5121:5;-1:-1:-1;5177:2:169;5162:18;;5149:32;5204:18;5193:30;;5190:50;;;5236:1;5233;5226:12;5190:50;5259:65;5316:7;5307:6;5296:9;5292:22;5259:65;:::i;:::-;5249:75;;;4821:509;;;;;:::o;5845:155::-;5904:5;5949:3;5940:6;5935:3;5931:16;5927:26;5924:46;;;5966:1;5963;5956:12;6005:1079;6197:6;6205;6213;6221;6229;6282:3;6270:9;6261:7;6257:23;6253:33;6250:53;;;6299:1;6296;6289:12;6250:53;6338:9;6325:23;6357:31;6382:5;6357:31;:::i;:::-;6407:5;-1:-1:-1;6463:2:169;6448:18;;6435:32;6486:18;6516:14;;;6513:34;;;6543:1;6540;6533:12;6513:34;6566:66;6624:7;6615:6;6604:9;6600:22;6566:66;:::i;:::-;6556:76;;6685:2;6674:9;6670:18;6657:32;6641:48;;6714:2;6704:8;6701:16;6698:36;;;6730:1;6727;6720:12;6698:36;6753:76;6821:7;6810:8;6799:9;6795:24;6753:76;:::i;:::-;6743:86;;6876:2;6865:9;6861:18;6848:32;6838:42;;6933:3;6922:9;6918:19;6905:33;6889:49;;6963:2;6953:8;6950:16;6947:36;;;6979:1;6976;6969:12;6947:36;;7002:76;7070:7;7059:8;7048:9;7044:24;7002:76;:::i;:::-;6992:86;;;6005:1079;;;;;;;;:::o;7089:180::-;7148:6;7201:2;7189:9;7180:7;7176:23;7172:32;7169:52;;;7217:1;7214;7207:12;7169:52;-1:-1:-1;7240:23:169;;7089:180;-1:-1:-1;7089:180:169:o;7274:118::-;7360:5;7353:13;7346:21;7339:5;7336:32;7326:60;;7382:1;7379;7372:12;7397:1161;7588:6;7596;7604;7612;7620;7628;7681:3;7669:9;7660:7;7656:23;7652:33;7649:53;;;7698:1;7695;7688:12;7649:53;7737:9;7724:23;7756:31;7781:5;7756:31;:::i;:::-;7806:5;-1:-1:-1;7863:2:169;7848:18;;7835:32;7876:33;7835:32;7876:33;:::i;:::-;7928:7;-1:-1:-1;7987:2:169;7972:18;;7959:32;8000:30;7959:32;8000:30;:::i;:::-;8049:7;-1:-1:-1;8107:2:169;8092:18;;8079:32;8130:18;8160:14;;;8157:34;;;8187:1;8184;8177:12;8157:34;8210:65;8267:7;8258:6;8247:9;8243:22;8210:65;:::i;:::-;8200:75;;8328:3;8317:9;8313:19;8300:33;8284:49;;8358:2;8348:8;8345:16;8342:36;;;8374:1;8371;8364:12;8342:36;;8413:85;8490:7;8479:8;8468:9;8464:24;8413:85;:::i;:::-;7397:1161;;;;-1:-1:-1;7397:1161:169;;-1:-1:-1;7397:1161:169;;8517:8;;7397:1161;-1:-1:-1;;;7397:1161:169:o;8563:574::-;8675:6;8683;8691;8744:2;8732:9;8723:7;8719:23;8715:32;8712:52;;;8760:1;8757;8750:12;8712:52;8799:9;8786:23;8818:31;8843:5;8818:31;:::i;:::-;8868:5;-1:-1:-1;8920:2:169;8905:18;;8892:32;;-1:-1:-1;8975:2:169;8960:18;;8947:32;9002:18;8991:30;;8988:50;;;9034:1;9031;9024:12;8988:50;9057:74;9123:7;9114:6;9103:9;9099:22;9057:74;:::i;:::-;9047:84;;;8563:574;;;;;:::o;9142:355::-;9228:6;9281:2;9269:9;9260:7;9256:23;9252:32;9249:52;;;9297:1;9294;9287:12;9249:52;9337:9;9324:23;9370:18;9362:6;9359:30;9356:50;;;9402:1;9399;9392:12;9356:50;9425:66;9483:7;9474:6;9463:9;9459:22;9425:66;:::i;9767:1602::-;10054:6;10062;10070;10078;10086;10094;10102;10110;10163:3;10151:9;10142:7;10138:23;10134:33;10131:53;;;10180:1;10177;10170:12;10131:53;10203:29;10222:9;10203:29;:::i;:::-;10193:39;;10279:2;10268:9;10264:18;10251:32;10241:42;;10334:2;10323:9;10319:18;10306:32;10357:18;10398:2;10390:6;10387:14;10384:34;;;10414:1;10411;10404:12;10384:34;10437:65;10494:7;10485:6;10474:9;10470:22;10437:65;:::i;:::-;10427:75;;10555:2;10544:9;10540:18;10527:32;10511:48;;10584:2;10574:8;10571:16;10568:36;;;10600:1;10597;10590:12;10568:36;10639:85;10716:7;10705:8;10694:9;10690:24;10639:85;:::i;:::-;10743:8;;-1:-1:-1;10613:111:169;-1:-1:-1;10831:3:169;10816:19;;10803:33;;-1:-1:-1;10848:16:169;;;10845:36;;;10877:1;10874;10867:12;10845:36;10900:67;10959:7;10948:8;10937:9;10933:24;10900:67;:::i;:::-;10890:77;;11020:3;11009:9;11005:19;10992:33;10976:49;;11050:2;11040:8;11037:16;11034:36;;;11066:1;11063;11056:12;11034:36;11089:76;11157:7;11146:8;11135:9;11131:24;11089:76;:::i;:::-;11079:86;;11218:3;11207:9;11203:19;11190:33;11174:49;;11248:2;11238:8;11235:16;11232:36;;;11264:1;11261;11254:12;11232:36;;11287:76;11355:7;11344:8;11333:9;11329:24;11287:76;:::i;:::-;11277:86;;;9767:1602;;;;;;;;;;;:::o;11374:1269::-;11611:6;11619;11627;11635;11643;11651;11704:3;11692:9;11683:7;11679:23;11675:33;11672:53;;;11721:1;11718;11711:12;11672:53;11744:29;11763:9;11744:29;:::i;:::-;11734:39;;11824:2;11813:9;11809:18;11796:32;11847:18;11888:2;11880:6;11877:14;11874:34;;;11904:1;11901;11894:12;11874:34;11927:66;11985:7;11976:6;11965:9;11961:22;11927:66;:::i;:::-;11917:76;;12046:2;12035:9;12031:18;12018:32;12002:48;;12075:2;12065:8;12062:16;12059:36;;;12091:1;12088;12081:12;12059:36;12114:76;12182:7;12171:8;12160:9;12156:24;12114:76;:::i;:::-;12104:86;;12237:2;12226:9;12222:18;12209:32;12199:42;;12294:3;12283:9;12279:19;12266:33;12250:49;;12324:2;12314:8;12311:16;12308:36;;;12340:1;12337;12330:12;12308:36;12363:76;12431:7;12420:8;12409:9;12405:24;12363:76;:::i;:::-;12353:86;;12492:3;12481:9;12477:19;12464:33;12448:49;;12522:2;12512:8;12509:16;12506:36;;;12538:1;12535;12528:12;12506:36;;12561:76;12629:7;12618:8;12607:9;12603:24;12561:76;:::i;:::-;12551:86;;;11374:1269;;;;;;;;:::o;12648:353::-;12733:6;12786:2;12774:9;12765:7;12761:23;12757:32;12754:52;;;12802:1;12799;12792:12;12754:52;12842:9;12829:23;12875:18;12867:6;12864:30;12861:50;;;12907:1;12904;12897:12;12861:50;12930:65;12987:7;12978:6;12967:9;12963:22;12930:65;:::i;13237:245::-;13304:6;13357:2;13345:9;13336:7;13332:23;13328:32;13325:52;;;13373:1;13370;13363:12;13325:52;13405:9;13399:16;13424:28;13446:5;13424:28;:::i;14004:247::-;14063:6;14116:2;14104:9;14095:7;14091:23;14087:32;14084:52;;;14132:1;14129;14122:12;14084:52;14171:9;14158:23;14190:31;14215:5;14190:31;:::i;14845:325::-;14933:6;14928:3;14921:19;14985:6;14978:5;14971:4;14966:3;14962:14;14949:43;;15037:1;15030:4;15021:6;15016:3;15012:16;15008:27;15001:38;14903:3;15159:4;15089:66;15084:2;15076:6;15072:15;15068:88;15063:3;15059:98;15055:109;15048:116;;14845:325;;;;:::o;15175:167::-;15242:20;;15302:14;15291:26;;15281:37;;15271:65;;15332:1;15329;15322:12;15347:1365;15593:4;-1:-1:-1;;;;;15703:2:169;15695:6;15691:15;15680:9;15673:34;15755:2;15747:6;15743:15;15738:2;15727:9;15723:18;15716:43;;15795:6;15790:2;15779:9;15775:18;15768:34;15838:3;15833:2;15822:9;15818:18;15811:31;15890:6;15877:20;15973:66;15964:6;15948:14;15944:27;15940:100;15920:18;15916:125;15906:153;;16055:1;16052;16045:12;15906:153;16081:31;;16189:2;16178:14;;;16135:19;16215:18;16204:30;;16201:50;;;16247:1;16244;16237:12;16201:50;16296:6;16280:14;16276:27;16267:7;16263:41;16260:61;;;16317:1;16314;16307:12;16260:61;16358:2;16352:3;16341:9;16337:19;16330:31;16384:63;16442:3;16431:9;16427:19;16419:6;16410:7;16384:63;:::i;:::-;16370:77;;;16476:34;16506:2;16498:6;16494:15;16476:34;:::i;:::-;16529:14;16598:2;16584:12;16580:21;16574:3;16563:9;16559:19;16552:50;16679:2;16643:34;16673:2;16665:6;16661:15;16643:34;:::i;:::-;16639:43;16633:3;16622:9;16618:19;16611:72;;;16700:6;16692:14;;;15347:1365;;;;;;;:::o;16717:277::-;16797:6;16850:2;16838:9;16829:7;16825:23;16821:32;16818:52;;;16866:1;16863;16856:12;16818:52;16905:9;16892:23;16944:1;16937:5;16934:12;16924:40;;16960:1;16957;16950:12;16999:581;17077:4;17083:6;17143:11;17130:25;17233:66;17222:8;17206:14;17202:29;17198:102;17178:18;17174:127;17164:155;;17315:1;17312;17305:12;17164:155;17342:33;;17394:20;;;-1:-1:-1;17437:18:169;17426:30;;17423:50;;;17469:1;17466;17459:12;17423:50;17502:4;17490:17;;-1:-1:-1;17533:14:169;17529:27;;;17519:38;;17516:58;;;17570:1;17567;17560:12;17585:273;17770:6;17762;17757:3;17744:33;17726:3;17796:16;;17821:13;;;17796:16;17585:273;-1:-1:-1;17585:273:169:o;18581:629::-;18699:4;18705:6;18765:11;18752:25;18855:66;18844:8;18828:14;18824:29;18820:102;18800:18;18796:127;18786:155;;18937:1;18934;18927:12;18786:155;18964:33;;19016:20;;;-1:-1:-1;19059:18:169;19048:30;;19045:50;;;19091:1;19088;19081:12;19045:50;19124:4;19112:17;;-1:-1:-1;19175:1:169;19171:14;;;19155;19151:35;19141:46;;19138:66;;;19200:1;19197;19190:12;19215:184;19267:77;19264:1;19257:88;19364:4;19361:1;19354:15;19388:4;19385:1;19378:15;19404:381;19495:4;19553:11;19540:25;19643:66;19632:8;19616:14;19612:29;19608:102;19588:18;19584:127;19574:155;;19725:1;19722;19715:12;19574:155;19746:33;;;;;19404:381;-1:-1:-1;;19404:381:169:o;20375:279::-;20440:9;;;20461:10;;;20458:190;;;20504:77;20501:1;20494:88;20605:4;20602:1;20595:15;20633:4;20630:1;20623:15;20659:184;20711:77;20708:1;20701:88;20808:4;20805:1;20798:15;20832:4;20829:1;20822:15;20848:266;20917:6;20970:2;20958:9;20949:7;20945:23;20941:32;20938:52;;;20986:1;20983;20976:12;20938:52;21025:9;21012:23;21064:1;21057:5;21054:12;21044:40;;21080:1;21077;21070:12;21119:315;21304:6;21293:9;21286:25;21347:2;21342;21331:9;21327:18;21320:30;21267:4;21367:61;21424:2;21413:9;21409:18;21401:6;21393;21367:61;:::i;21439:336::-;21508:6;21561:2;21549:9;21540:7;21536:23;21532:32;21529:52;;;21577:1;21574;21567:12;21529:52;21609:9;21603:16;21659:66;21652:5;21648:78;21641:5;21638:89;21628:117;;21741:1;21738;21731:12;21780:246;21939:2;21928:9;21921:21;21902:4;21959:61;22016:2;22005:9;22001:18;21993:6;21985;21959:61;:::i;23257:322::-;23298:3;23336:5;23330:12;23360:1;23370:128;23384:6;23381:1;23378:13;23370:128;;;23481:4;23466:13;;;23462:24;;23456:31;23443:11;;;23436:52;23399:12;23370:128;;;-1:-1:-1;23553:1:169;23517:16;;23542:13;;;-1:-1:-1;23517:16:169;;23257:322;-1:-1:-1;23257:322:169:o;23584:261::-;23759:3;23784:55;23809:29;23834:3;23826:6;23809:29;:::i;:::-;23801:6;23784:55;:::i;25071:350::-;25256:3;25287:29;25312:3;25304:6;25287:29;:::i;:::-;25325:21;;;-1:-1:-1;;25373:2:169;25362:14;;25355:30;25412:2;25401:14;;25071:350;-1:-1:-1;25071:350:169:o;25426:184::-;25478:77;25475:1;25468:88;25575:4;25572:1;25565:15;25599:4;25596:1;25589:15;25615:844;25769:4;25811:3;25800:9;25796:19;25788:27;;-1:-1:-1;;;;;25922:2:169;25913:6;25907:13;25903:22;25892:9;25885:41;25994:2;25986:4;25978:6;25974:17;25968:24;25964:33;25957:4;25946:9;25942:20;25935:63;26066:2;26058:4;26050:6;26046:17;26040:24;26036:33;26029:4;26018:9;26014:20;26007:63;;26126:4;26118:6;26114:17;26108:24;26101:4;26090:9;26086:20;26079:54;26180:4;26172:6;26168:17;26162:24;26222:1;26208:12;26205:19;26195:207;;26258:77;26255:1;26248:88;26359:4;26356:1;26349:15;26387:4;26384:1;26377:15;26195:207;26440:12;26433:4;26422:9;26418:20;26411:42;;25615:844;;;;:::o;26464:184::-;26534:6;26587:2;26575:9;26566:7;26562:23;26558:32;26555:52;;;26603:1;26600;26593:12;26555:52;-1:-1:-1;26626:16:169;;26464:184;-1:-1:-1;26464:184:169:o;26653:331::-;26758:9;26769;26811:8;26799:10;26796:24;26793:44;;;26833:1;26830;26823:12;26793:44;26862:6;26852:8;26849:20;26846:40;;;26882:1;26879;26872:12;26846:40;-1:-1:-1;;26908:23:169;;;26953:25;;;;;-1:-1:-1;26653:331:169:o;26989:608::-;27088:6;27096;27104;27112;27165:3;27153:9;27144:7;27140:23;27136:33;27133:53;;;27182:1;27179;27172:12;27133:53;27221:9;27208:23;27240:31;27265:5;27240:31;:::i;:::-;27290:5;-1:-1:-1;27347:2:169;27332:18;;27319:32;27360:33;27319:32;27360:33;:::i;:::-;27412:7;-1:-1:-1;27466:2:169;27451:18;;27438:32;;-1:-1:-1;27522:2:169;27507:18;;27494:32;27535:30;27494:32;27535:30;:::i;:::-;26989:608;;;;-1:-1:-1;26989:608:169;;-1:-1:-1;;26989:608:169:o;27602:622::-;27712:6;27720;27728;27736;27789:3;27777:9;27768:7;27764:23;27760:33;27757:53;;;27806:1;27803;27796:12;27757:53;27845:9;27832:23;27864:31;27889:5;27864:31;:::i;:::-;27914:5;-1:-1:-1;27971:2:169;27956:18;;27943:32;27984:33;27943:32;27984:33;:::i;:::-;28036:7;-1:-1:-1;28095:2:169;28080:18;;28067:32;28108:33;28067:32;28108:33;:::i;:::-;27602:622;;;;-1:-1:-1;28160:7:169;;28214:2;28199:18;28186:32;;-1:-1:-1;;27602:622:169:o;28229:991::-;28382:6;28390;28398;28406;28414;28422;28430;28483:3;28471:9;28462:7;28458:23;28454:33;28451:53;;;28500:1;28497;28490:12;28451:53;28539:9;28526:23;28558:31;28583:5;28558:31;:::i;:::-;28608:5;-1:-1:-1;28665:2:169;28650:18;;28637:32;28678:33;28637:32;28678:33;:::i;:::-;28730:7;-1:-1:-1;28789:2:169;28774:18;;28761:32;28802:33;28761:32;28802:33;:::i;:::-;28854:7;-1:-1:-1;28913:2:169;28898:18;;28885:32;28926:33;28885:32;28926:33;:::i;:::-;28978:7;-1:-1:-1;29032:3:169;29017:19;;29004:33;;-1:-1:-1;29089:3:169;29074:19;;29061:33;29103;29061;29103;:::i;:::-;29155:7;29145:17;;;29209:3;29198:9;29194:19;29181:33;29171:43;;28229:991;;;;;;;;;;:::o;29225:472::-;29318:6;29326;29334;29387:2;29375:9;29366:7;29362:23;29358:32;29355:52;;;29403:1;29400;29393:12;29355:52;29442:9;29429:23;29461:31;29486:5;29461:31;:::i;:::-;29511:5;-1:-1:-1;29568:2:169;29553:18;;29540:32;29581:33;29540:32;29581:33;:::i;:::-;29225:472;;29633:7;;-1:-1:-1;;;29687:2:169;29672:18;;;;29659:32;;29225:472::o;29702:758::-;29818:6;29826;29834;29842;29850;29903:3;29891:9;29882:7;29878:23;29874:33;29871:53;;;29920:1;29917;29910:12;29871:53;29959:9;29946:23;29978:31;30003:5;29978:31;:::i;:::-;30028:5;-1:-1:-1;30085:2:169;30070:18;;30057:32;30098:33;30057:32;30098:33;:::i;:::-;30150:7;-1:-1:-1;30209:2:169;30194:18;;30181:32;30222:33;30181:32;30222:33;:::i;:::-;30274:7;-1:-1:-1;30328:2:169;30313:18;;30300:32;;-1:-1:-1;30384:3:169;30369:19;;30356:33;30398:30;30356:33;30398:30;:::i;:::-;30447:7;30437:17;;;29702:758;;;;;;;;:::o;30465:311::-;30495:1;30529:4;30526:1;30522:12;30553:3;30543:191;;30590:77;30587:1;30580:88;30691:4;30688:1;30681:15;30719:4;30716:1;30709:15;30543:191;30766:3;30759:4;30756:1;30752:12;30748:22;30743:27;;;30465:311;;;;:::o",
+ "linkReferences": {},
+ "immutableReferences": {
+ "65518": [
+ {
+ "start": 824,
+ "length": 32
+ },
+ {
+ "start": 1042,
+ "length": 32
+ },
+ {
+ "start": 1703,
+ "length": 32
+ },
+ {
+ "start": 5408,
+ "length": 32
+ },
+ {
+ "start": 5631,
+ "length": 32
+ }
+ ],
+ "65523": [
+ {
+ "start": 407,
+ "length": 32
+ },
+ {
+ "start": 1978,
+ "length": 32
+ },
+ {
+ "start": 6284,
+ "length": 32
+ },
+ {
+ "start": 7724,
+ "length": 32
+ },
+ {
+ "start": 7966,
+ "length": 32
+ },
+ {
+ "start": 8236,
+ "length": 32
+ },
+ {
+ "start": 8971,
+ "length": 32
+ },
+ {
+ "start": 9255,
+ "length": 32
+ },
+ {
+ "start": 12348,
+ "length": 32
+ }
+ ],
+ "65528": [
+ {
+ "start": 599,
+ "length": 32
+ },
+ {
+ "start": 1924,
+ "length": 32
+ },
+ {
+ "start": 5852,
+ "length": 32
+ }
+ ],
+ "66488": [
+ {
+ "start": 1444,
+ "length": 32
+ }
+ ],
+ "66490": [
+ {
+ "start": 1242,
+ "length": 32
+ }
+ ]
+ }
+ },
+ "methodIdentifiers": {
+ "AUTHENTICATOR()": "c6186181",
+ "BALANCE_MANAGER()": "29bcdc95",
+ "DOMAIN_SEPARATOR()": "3644e515",
+ "REPOSITORY()": "6f35d2d2",
+ "cancelLimitOrder(uint256)": "a5cdc8fc",
+ "hashBaseTokenData((address,uint256,uint256,uint256,uint256))": "875530ff",
+ "hashOrder((address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)))": "e242924e",
+ "hashQuoteTokenData((address,uint256,uint256,uint256,uint256))": "4c9e03d3",
+ "hashSingleOrder((string,uint256,address,address,address,address,uint256,uint256,uint256,uint256,address))": "b11f1262",
+ "isValidSignature(bytes32,bytes)": "1626ba7e",
+ "settle(address,uint256,(address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)),(address,uint256,bytes)[],((address,uint256,bytes)[],(address,uint256,bytes)[]),(uint8,uint8,bytes),(uint8,uint8,bytes))": "cba673a7",
+ "settleSingle(address,(string,uint256,address,address,address,address,uint256,uint256,uint256,uint256,address),(uint8,uint8,bytes),uint256,(uint8,uint8,bytes))": "9935c868",
+ "settleSingleWithPermitsSignatures(address,(string,uint256,address,address,address,address,uint256,uint256,uint256,uint256,address),(uint8,uint8,bytes),uint256,(uint8,uint8,bytes),(bytes,uint48,uint48))": "db587728",
+ "settleWithPermitsSignatures(address,uint256,(address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)),(address,uint256,bytes)[],((address,uint256,bytes)[],(address,uint256,bytes)[]),(uint8,uint8,bytes),(uint8,uint8,bytes),(bytes,uint48,uint48))": "51d46815",
+ "validateHooks(address,((address,uint256,bytes)[],(address,uint256,bytes)[]))": "5aa0e95d",
+ "validateInteractions(address,address,bool,(address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)),(address,uint256,bytes)[])": "a7ab49bc",
+ "validateOrderAmounts((address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)))": "fa5cd56c",
+ "validateSignature(address,bytes32,(uint8,uint8,bytes))": "ae80c584"
+ },
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IAllowListAuthentication\",\"name\":\"authenticator_\",\"type\":\"address\"},{\"internalType\":\"contract IRepository\",\"name\":\"repository_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"permit2_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAsset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBaseTokenAmounts\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDestination\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEIP1271Signature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEIP712Signature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidETHSignSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFillAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidHooksTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInteractionsBaseTokenAmounts\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInteractionsQuoteTokenAmounts\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLendingPoolInteraction\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidQuoteTokenAmounts\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignatureType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSource\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonceInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotMaker\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotSolver\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OrderExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PartialFillNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReceiverNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureIsExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureIsNotEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpdatedMakerAmountsTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroMakerAmount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"Interaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"rfqId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"effectiveTrader\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"baseToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"quoteToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quoteTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"TradeOrder\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AUTHENTICATOR\",\"outputs\":[{\"internalType\":\"contract IAllowListAuthentication\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BALANCE_MANAGER\",\"outputs\":[{\"internalType\":\"contract IBalanceManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REPOSITORY\",\"outputs\":[{\"internalType\":\"contract IRepository\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"cancelLimitOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toRecipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toRepay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toSupply\",\"type\":\"uint256\"}],\"internalType\":\"struct ILiquoriceSettlement.BaseTokenData\",\"name\":\"_baseTokenData\",\"type\":\"tuple\"}],\"name\":\"hashBaseTokenData\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"rfqId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"effectiveTrader\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"quoteExpiry\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minFillAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toRecipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toRepay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toSupply\",\"type\":\"uint256\"}],\"internalType\":\"struct ILiquoriceSettlement.BaseTokenData\",\"name\":\"baseTokenData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toTrader\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toWithdraw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toBorrow\",\"type\":\"uint256\"}],\"internalType\":\"struct ILiquoriceSettlement.QuoteTokenData\",\"name\":\"quoteTokenData\",\"type\":\"tuple\"}],\"internalType\":\"struct ILiquoriceSettlement.Order\",\"name\":\"_order\",\"type\":\"tuple\"}],\"name\":\"hashOrder\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toTrader\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toWithdraw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toBorrow\",\"type\":\"uint256\"}],\"internalType\":\"struct ILiquoriceSettlement.QuoteTokenData\",\"name\":\"_quoteTokenData\",\"type\":\"tuple\"}],\"name\":\"hashQuoteTokenData\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"rfqId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"effectiveTrader\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"baseToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"quoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quoteTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minFillAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quoteExpiry\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"internalType\":\"struct ILiquoriceSettlement.Single\",\"name\":\"_order\",\"type\":\"tuple\"}],\"name\":\"hashSingleOrder\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_filledTakerAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"rfqId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"effectiveTrader\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"quoteExpiry\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minFillAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toRecipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toRepay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toSupply\",\"type\":\"uint256\"}],\"internalType\":\"struct ILiquoriceSettlement.BaseTokenData\",\"name\":\"baseTokenData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toTrader\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toWithdraw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toBorrow\",\"type\":\"uint256\"}],\"internalType\":\"struct ILiquoriceSettlement.QuoteTokenData\",\"name\":\"quoteTokenData\",\"type\":\"tuple\"}],\"internalType\":\"struct ILiquoriceSettlement.Order\",\"name\":\"_order\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct GPv2Interaction.Data[]\",\"name\":\"_interactions\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct GPv2Interaction.Data[]\",\"name\":\"beforeSettle\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct GPv2Interaction.Data[]\",\"name\":\"afterSettle\",\"type\":\"tuple[]\"}],\"internalType\":\"struct GPv2Interaction.Hooks\",\"name\":\"_hooks\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum Signature.Type\",\"name\":\"signatureType\",\"type\":\"uint8\"},{\"internalType\":\"enum Signature.TransferCommand\",\"name\":\"transferCommand\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"signatureBytes\",\"type\":\"bytes\"}],\"internalType\":\"struct Signature.TypedSignature\",\"name\":\"_makerSignature\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum Signature.Type\",\"name\":\"signatureType\",\"type\":\"uint8\"},{\"internalType\":\"enum Signature.TransferCommand\",\"name\":\"transferCommand\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"signatureBytes\",\"type\":\"bytes\"}],\"internalType\":\"struct Signature.TypedSignature\",\"name\":\"_takerSignature\",\"type\":\"tuple\"}],\"name\":\"settle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rfqId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"effectiveTrader\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"baseToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"quoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quoteTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minFillAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quoteExpiry\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"internalType\":\"struct ILiquoriceSettlement.Single\",\"name\":\"_order\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum Signature.Type\",\"name\":\"signatureType\",\"type\":\"uint8\"},{\"internalType\":\"enum Signature.TransferCommand\",\"name\":\"transferCommand\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"signatureBytes\",\"type\":\"bytes\"}],\"internalType\":\"struct Signature.TypedSignature\",\"name\":\"_makerSignature\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_filledTakerAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"enum Signature.Type\",\"name\":\"signatureType\",\"type\":\"uint8\"},{\"internalType\":\"enum Signature.TransferCommand\",\"name\":\"transferCommand\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"signatureBytes\",\"type\":\"bytes\"}],\"internalType\":\"struct Signature.TypedSignature\",\"name\":\"_takerSignature\",\"type\":\"tuple\"}],\"name\":\"settleSingle\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rfqId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"effectiveTrader\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"baseToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"quoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quoteTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minFillAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quoteExpiry\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"internalType\":\"struct ILiquoriceSettlement.Single\",\"name\":\"_order\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum Signature.Type\",\"name\":\"signatureType\",\"type\":\"uint8\"},{\"internalType\":\"enum Signature.TransferCommand\",\"name\":\"transferCommand\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"signatureBytes\",\"type\":\"bytes\"}],\"internalType\":\"struct Signature.TypedSignature\",\"name\":\"_makerSignature\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_filledTakerAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"enum Signature.Type\",\"name\":\"signatureType\",\"type\":\"uint8\"},{\"internalType\":\"enum Signature.TransferCommand\",\"name\":\"transferCommand\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"signatureBytes\",\"type\":\"bytes\"}],\"internalType\":\"struct Signature.TypedSignature\",\"name\":\"_takerSignature\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"deadline\",\"type\":\"uint48\"}],\"internalType\":\"struct Signature.TakerPermitInfo\",\"name\":\"_takerPermitInfo\",\"type\":\"tuple\"}],\"name\":\"settleSingleWithPermitsSignatures\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_filledTakerAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"rfqId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"effectiveTrader\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"quoteExpiry\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minFillAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toRecipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toRepay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toSupply\",\"type\":\"uint256\"}],\"internalType\":\"struct ILiquoriceSettlement.BaseTokenData\",\"name\":\"baseTokenData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toTrader\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toWithdraw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toBorrow\",\"type\":\"uint256\"}],\"internalType\":\"struct ILiquoriceSettlement.QuoteTokenData\",\"name\":\"quoteTokenData\",\"type\":\"tuple\"}],\"internalType\":\"struct ILiquoriceSettlement.Order\",\"name\":\"_order\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct GPv2Interaction.Data[]\",\"name\":\"_interactions\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct GPv2Interaction.Data[]\",\"name\":\"beforeSettle\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct GPv2Interaction.Data[]\",\"name\":\"afterSettle\",\"type\":\"tuple[]\"}],\"internalType\":\"struct GPv2Interaction.Hooks\",\"name\":\"_hooks\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum Signature.Type\",\"name\":\"signatureType\",\"type\":\"uint8\"},{\"internalType\":\"enum Signature.TransferCommand\",\"name\":\"transferCommand\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"signatureBytes\",\"type\":\"bytes\"}],\"internalType\":\"struct Signature.TypedSignature\",\"name\":\"_makerSignature\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum Signature.Type\",\"name\":\"signatureType\",\"type\":\"uint8\"},{\"internalType\":\"enum Signature.TransferCommand\",\"name\":\"transferCommand\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"signatureBytes\",\"type\":\"bytes\"}],\"internalType\":\"struct Signature.TypedSignature\",\"name\":\"_takerSignature\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"deadline\",\"type\":\"uint48\"}],\"internalType\":\"struct Signature.TakerPermitInfo\",\"name\":\"_takerPermitInfo\",\"type\":\"tuple\"}],\"name\":\"settleWithPermitsSignatures\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRepository\",\"name\":\"_repository\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct GPv2Interaction.Data[]\",\"name\":\"beforeSettle\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct GPv2Interaction.Data[]\",\"name\":\"afterSettle\",\"type\":\"tuple[]\"}],\"internalType\":\"struct GPv2Interaction.Hooks\",\"name\":\"_hooks\",\"type\":\"tuple\"}],\"name\":\"validateHooks\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRepository\",\"name\":\"_repository\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isPartialFill\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"rfqId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"effectiveTrader\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"quoteExpiry\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minFillAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toRecipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toRepay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toSupply\",\"type\":\"uint256\"}],\"internalType\":\"struct ILiquoriceSettlement.BaseTokenData\",\"name\":\"baseTokenData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toTrader\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toWithdraw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toBorrow\",\"type\":\"uint256\"}],\"internalType\":\"struct ILiquoriceSettlement.QuoteTokenData\",\"name\":\"quoteTokenData\",\"type\":\"tuple\"}],\"internalType\":\"struct ILiquoriceSettlement.Order\",\"name\":\"_order\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct GPv2Interaction.Data[]\",\"name\":\"_interactions\",\"type\":\"tuple[]\"}],\"name\":\"validateInteractions\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"market\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"rfqId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"trader\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"effectiveTrader\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"quoteExpiry\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minFillAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toRecipient\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toRepay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toSupply\",\"type\":\"uint256\"}],\"internalType\":\"struct ILiquoriceSettlement.BaseTokenData\",\"name\":\"baseTokenData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toTrader\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toWithdraw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toBorrow\",\"type\":\"uint256\"}],\"internalType\":\"struct ILiquoriceSettlement.QuoteTokenData\",\"name\":\"quoteTokenData\",\"type\":\"tuple\"}],\"internalType\":\"struct ILiquoriceSettlement.Order\",\"name\":\"_order\",\"type\":\"tuple\"}],\"name\":\"validateOrderAmounts\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validationAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enum Signature.Type\",\"name\":\"signatureType\",\"type\":\"uint8\"},{\"internalType\":\"enum Signature.TransferCommand\",\"name\":\"transferCommand\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"signatureBytes\",\"type\":\"bytes\"}],\"internalType\":\"struct Signature.TypedSignature\",\"name\":\"_signature\",\"type\":\"tuple\"}],\"name\":\"validateSignature\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"Interaction(address,uint256,bytes4)\":{\"params\":{\"selector\":\"Selector of the interaction function\",\"target\":\"Address of the interaction target\",\"value\":\"Value associated with the interaction\"}}},\"kind\":\"dev\",\"methods\":{\"cancelLimitOrder(uint256)\":{\"params\":{\"nonce\":\"Nonce of the order to be canceled\"}},\"hashOrder((address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)))\":{\"params\":{\"_order\":\"Order data to hash\"},\"returns\":{\"_0\":\"bytes32 Hash of the order\"}},\"hashSingleOrder((string,uint256,address,address,address,address,uint256,uint256,uint256,uint256,address))\":{\"params\":{\"_order\":\"Single order data to hash\"},\"returns\":{\"_0\":\"bytes32 Hash of the single order\"}},\"isValidSignature(bytes32,bytes)\":{\"params\":{\"_hash\":\"Hash of the data\",\"_signature\":\"Signature to validate\"},\"returns\":{\"_0\":\"Magic value if signature is valid, otherwise 0xffffffff\"}},\"settle(address,uint256,(address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)),(address,uint256,bytes)[],((address,uint256,bytes)[],(address,uint256,bytes)[]),(uint8,uint8,bytes),(uint8,uint8,bytes))\":{\"params\":{\"_filledTakerAmount\":\"Amount filled by the taker\",\"_hooks\":\"Hooks to be called before and after settlement\",\"_interactions\":\"Array of interaction data to be executed during settlement\",\"_makerSignature\":\"Typed signature of the maker\",\"_order\":\"Order data\",\"_signer\":\"Address that signed the order\",\"_takerSignature\":\"Typed signature of the taker\"}},\"settleSingle(address,(string,uint256,address,address,address,address,uint256,uint256,uint256,uint256,address),(uint8,uint8,bytes),uint256,(uint8,uint8,bytes))\":{\"params\":{\"_filledTakerAmount\":\"Amount filled by the taker\",\"_makerSignature\":\"Signature of the maker\",\"_order\":\"Single order data\",\"_signer\":\"Address that signed the order\",\"_takerSignature\":\"Signature of the taker\"}},\"validateHooks(address,((address,uint256,bytes)[],(address,uint256,bytes)[]))\":{\"params\":{\"_hooks\":\"Hooks data\",\"_repository\":\"Repository interface\"}},\"validateInteractions(address,address,bool,(address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)),(address,uint256,bytes)[])\":{\"params\":{\"_interactions\":\"Array of interaction data\",\"_order\":\"Order data\",\"_repository\":\"Repository interface\",\"_signer\":\"Signer address\"}},\"validateOrderAmounts((address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)))\":{\"params\":{\"_order\":\"Order data\"}},\"validateSignature(address,bytes32,(uint8,uint8,bytes))\":{\"params\":{\"_hash\":\"Hash of the data\",\"_signature\":\"Signature data\",\"_validationAddress\":\"Address to validate against\"}}},\"title\":\"Liquorice Settlement Contract\",\"version\":1},\"userdoc\":{\"events\":{\"Interaction(address,uint256,bytes4)\":{\"notice\":\"Emitted when an interaction is executed\"}},\"kind\":\"user\",\"methods\":{\"AUTHENTICATOR()\":{\"notice\":\"Authenticator for verifying solvers and makers\"},\"BALANCE_MANAGER()\":{\"notice\":\"Manager for handling balance transfers\"},\"REPOSITORY()\":{\"notice\":\"Repository that stores data for Lending Pools\"},\"cancelLimitOrder(uint256)\":{\"notice\":\"Cancels a limit order by invalidating its nonce\"},\"hashOrder((address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)))\":{\"notice\":\"Computes the hash of an order\"},\"hashSingleOrder((string,uint256,address,address,address,address,uint256,uint256,uint256,uint256,address))\":{\"notice\":\"Computes the hash of a single order\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Validates a signature\"},\"settle(address,uint256,(address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)),(address,uint256,bytes)[],((address,uint256,bytes)[],(address,uint256,bytes)[]),(uint8,uint8,bytes),(uint8,uint8,bytes))\":{\"notice\":\"Settles a signed order with the given interactions and hooks\"},\"settleSingle(address,(string,uint256,address,address,address,address,uint256,uint256,uint256,uint256,address),(uint8,uint8,bytes),uint256,(uint8,uint8,bytes))\":{\"notice\":\"Settles a single order\"},\"validateHooks(address,((address,uint256,bytes)[],(address,uint256,bytes)[]))\":{\"notice\":\"Validates hooks for an order\"},\"validateInteractions(address,address,bool,(address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)),(address,uint256,bytes)[])\":{\"notice\":\"Validates interactions for an order\"},\"validateOrderAmounts((address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)))\":{\"notice\":\"Validates the amounts in an order\"},\"validateSignature(address,bytes32,(uint8,uint8,bytes))\":{\"notice\":\"Validates a signature\"}},\"notice\":\"Handles settlement of orders and interactions\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/contracts/settlement/LiquoriceSettlement.sol\":\"LiquoriceSettlement\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@chainlink/=lib/chainlink/contracts/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/\",\":contracts/=src/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":interfaces/=src/interfaces/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin-upgrades/=lib/openzeppelin-upgrades/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0xc92e946b954f185c3ca5ee56f9721aa73d64464456a46459384cb0ccf3c3856e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ae178b4e7b259557d8b93f3dd4f6f909ac72f914a9e92676e59b8d737f0423e2\",\"dweb:/ipfs/QmXeqyUJYzn6w8wyivQAtSzmwwFQnHaFYPvGad66RW1sPf\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x6dd0cb67846da3fa1241c520faaa215d6bec8226e37beac6056c51e8af44d24e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://650e533e62b30dcc6edea2b6c91358d5659da3bde42e56adf7316c493b916a15\",\"dweb:/ipfs/QmYkmK2vPE6FjdAoQVpZSJxamTLGno9wzGS495TcMNFViV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x6f61a65c733690afafb4cf528b5677e704828c8350b60b948dbc1d3bb6d7689c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://00265b985b303af62ee243e10db819fa8cf890d9f122f82f4f03f55b02f62654\",\"dweb:/ipfs/QmNneFqZn2uKK6dECxatH6aENk1EMCTETi58dGaz5NCWQe\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"src/contracts/lib/GPv2Interaction.sol\":{\"keccak256\":\"0x55968a83f6ae3d8d806b8faf02360abc676fb7476d05f33c0c9d324e6336fd0f\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://2d813e60c3fa006d02c8fd1aed73d2d47f9f153ac3c410d408384f3084e46de3\",\"dweb:/ipfs/QmdNyQMmyscMH6CVUkhQQfGdKdxgqhqDEe5K4iwrvcWDsk\"]},\"src/contracts/lib/Signature.sol\":{\"keccak256\":\"0xc084fe793244e2e7b0f4a51440df7dbf97d39b4ad6450a2b8a082cb6d86993b5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9bff9732e68149a83f2e044c7f1700432997750166cd15f4a54f73bd68a475aa\",\"dweb:/ipfs/QmZJMNppHQ3nUDcJhAkrMYa4QWhGLDr4Tzah6LndgrDCib\"]},\"src/contracts/settlement/BalanceManager.sol\":{\"keccak256\":\"0x82d5d0de5cf88ff8882f1f7a2d05b98ed32bb3f2a6b9eab728ce55ae943e67c3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ebcbe822ad5c68896a12ecd60e17ba6a2ed0ba8e0544c7ad54d88d1c25206b5c\",\"dweb:/ipfs/QmYEZeKUEz7Nw6MW9uZHnXvkeRTmmcS1WZhx77s9kUWSWw\"]},\"src/contracts/settlement/LiquoriceSettlement.sol\":{\"keccak256\":\"0xcac528919829fc8e021cec4325b38835866a7d0630b61349deae6ecfbe0ddaef\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://6d6dafbba3885b42cb97be6d190ac1f611548ceb2116e9b6ed7da9bf422c8b58\",\"dweb:/ipfs/QmZQk6WQNgYqsu9Z85tPF2VQGXgaYzvpEqc7VEmJ4zEEJU\"]},\"src/contracts/settlement/Signing.sol\":{\"keccak256\":\"0xad9e59ae740627e5b71fa1ebde019999084480664d06d18f0a01e4d31fa32ef6\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ea0e0021cd0074292b04f9921f6ca3cc77a6799c86cacabb9dc6ff7dadbd7933\",\"dweb:/ipfs/QmPjY69PntfUGW5eNrNe98DCTemq6daRqUiLFkcYvVWuvh\"]},\"src/interfaces/IACLManager.sol\":{\"keccak256\":\"0xeee5cbedcfaff01733979b8f439a817aa67b09d9e330d21e11f180dceebed024\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://814431cd9df23d0d7cc0f9761927e2aa18fc7fa599f34422f332ee6352580d69\",\"dweb:/ipfs/QmXLdGsdMyeX5j64rAaByz35SwEMPMQ7usXwruWjEPo6Cz\"]},\"src/interfaces/IAllowListAuthentication.sol\":{\"keccak256\":\"0xbabb9eda80757d9355ab9863fccb3fdb1f15c1cbce458c3236d792d007077a9e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fa97e90b315ffc3cae3998adda6810c856ea96be015e797723e13b436d1a10\",\"dweb:/ipfs/Qme1dzXXcMDQpeqyqfuSbZDY6GKWjyrRBQrNDjitPeXQEF\"]},\"src/interfaces/IBalanceManager.sol\":{\"keccak256\":\"0xc4cff6f33170df6d91a866ee69263c9b90091e94027bea04038558c315e6e127\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://867164a381fb78da320c89db6b15978becd49be61e2349abc805362904bffb4e\",\"dweb:/ipfs/QmPY9UYCi9YVdCC8A1UxmTPcnV5BmMj93Gq1nqxBv4fMJ7\"]},\"src/interfaces/IInterestRateModel.sol\":{\"keccak256\":\"0xccd4c1dea98176c392de07cb8f5a2ac969405090d42d831310fa53464c0d9264\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a22b5b87be29e616142b6c4677e109e9246157c4b7e6378334fbc7ba403d82de\",\"dweb:/ipfs/QmXmSF34VsktTfqSCJU8Mz9sTaXGVk7xdYQwr9NcsR3k43\"]},\"src/interfaces/ILiquoriceSettlement.sol\":{\"keccak256\":\"0xa4a36d51f174d9994c39287f89e63bbea57ff5adcd2a9bc649c67bb5cae75272\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8562fe9fc033c3e3320c5d95ad10e49f5e23ea50a5e9eaf186cbf53d9f1ce7a6\",\"dweb:/ipfs/QmXKSjRi8oxmS5xd5V95HofYtFzYfehbL6s8t2MKoXR7y1\"]},\"src/interfaces/IPriceProvider.sol\":{\"keccak256\":\"0x75812be8d692287010f5ee9ce13556df1bd8299faa64b42c49cd08cf7cc53847\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://623d4faa57b078a33a2afe0d13fc426c4a750ae7f07f9d826000047dab54148e\",\"dweb:/ipfs/QmYmFpZnLug6FBG9C8s1mxPBjZHwiCk7cRBC7A9WXtyGKE\"]},\"src/interfaces/IRepository.sol\":{\"keccak256\":\"0xf08a5812ce10042564d518994db487c49d9f35d511da07a5103b9b886b6e2607\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b602c9f5a61c9796f711330ee56d4f0287adc656c686acf391d4e8c45453e6d0\",\"dweb:/ipfs/QmQ7XJ1qERgRxWurpkS3t1XDtuBUTpQEz14h4eXBc8vp9t\"]},\"src/interfaces/external/permit/IAllowanceTransfer.sol\":{\"keccak256\":\"0x23986b17f0c10296cb8afadb43014cd7901f56dac5ba85067d18ca7db7d3e37e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5f6ec55ce038e045b15a89a7f19fa45aa09d42a52517dd1846968d16777d3a9b\",\"dweb:/ipfs/QmZXthQLUtRFgqGv3bFbijmNk5Vviacrf7VnRDbXEQjdBQ\"]},\"src/interfaces/external/permit/IEIP712.sol\":{\"keccak256\":\"0x07e44e64248ed6316fe1db6f44c80468b950e6d1ab4bfdf21a65cbbd27718f77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://58487548bc5289e7f5a4d4c278e5c7e9a7829d8a5be024a42938943f8c8fb63b\",\"dweb:/ipfs/QmYg63mq3SgXH6H4Wyvznb1E5fEjw6W7NeLASUcRjMuKYa\"]}},\"version\":1}",
+ "metadata": {
+ "compiler": {
+ "version": "0.8.23+commit.f704f362"
+ },
+ "language": "Solidity",
+ "output": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "contract IAllowListAuthentication",
+ "name": "authenticator_",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IRepository",
+ "name": "repository_",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "permit2_",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "ECDSAInvalidSignature"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "length",
+ "type": "uint256"
+ }
+ ],
+ "type": "error",
+ "name": "ECDSAInvalidSignatureLength"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "type": "error",
+ "name": "ECDSAInvalidSignatureS"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidAmount"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidAsset"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidBaseTokenAmounts"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidDestination"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidEIP1271Signature"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidEIP712Signature"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidETHSignSignature"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidFillAmount"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidHooksTarget"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidInteractionsBaseTokenAmounts"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidInteractionsQuoteTokenAmounts"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidLendingPoolInteraction"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidQuoteTokenAmounts"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidSignatureType"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidSigner"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "InvalidSource"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "NonceInvalid"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "NotMaker"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "NotSolver"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "OrderExpired"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "PartialFillNotSupported"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "ReceiverNotManager"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "ReentrancyGuardReentrantCall"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ }
+ ],
+ "type": "error",
+ "name": "SafeERC20FailedOperation"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "SignatureIsExpired"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "SignatureIsNotEmpty"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "UpdatedMakerAmountsTooLow"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "ZeroMakerAmount"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address",
+ "indexed": true
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256",
+ "indexed": false
+ },
+ {
+ "internalType": "bytes4",
+ "name": "selector",
+ "type": "bytes4",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "Interaction",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "rfqId",
+ "type": "string",
+ "indexed": true
+ },
+ {
+ "internalType": "address",
+ "name": "trader",
+ "type": "address",
+ "indexed": false
+ },
+ {
+ "internalType": "address",
+ "name": "effectiveTrader",
+ "type": "address",
+ "indexed": false
+ },
+ {
+ "internalType": "address",
+ "name": "baseToken",
+ "type": "address",
+ "indexed": false
+ },
+ {
+ "internalType": "address",
+ "name": "quoteToken",
+ "type": "address",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "baseTokenAmount",
+ "type": "uint256",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "quoteTokenAmount",
+ "type": "uint256",
+ "indexed": false
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "TradeOrder",
+ "anonymous": false
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "AUTHENTICATOR",
+ "outputs": [
+ {
+ "internalType": "contract IAllowListAuthentication",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "BALANCE_MANAGER",
+ "outputs": [
+ {
+ "internalType": "contract IBalanceManager",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "REPOSITORY",
+ "outputs": [
+ {
+ "internalType": "contract IRepository",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "cancelLimitOrder"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "struct ILiquoriceSettlement.BaseTokenData",
+ "name": "_baseTokenData",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toRecipient",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toRepay",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toSupply",
+ "type": "uint256"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "hashBaseTokenData",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "struct ILiquoriceSettlement.Order",
+ "name": "_order",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "market",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "rfqId",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "trader",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "effectiveTrader",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quoteExpiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minFillAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.BaseTokenData",
+ "name": "baseTokenData",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toRecipient",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toRepay",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toSupply",
+ "type": "uint256"
+ }
+ ]
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.QuoteTokenData",
+ "name": "quoteTokenData",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toTrader",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toWithdraw",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toBorrow",
+ "type": "uint256"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "hashOrder",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "struct ILiquoriceSettlement.QuoteTokenData",
+ "name": "_quoteTokenData",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toTrader",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toWithdraw",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toBorrow",
+ "type": "uint256"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "hashQuoteTokenData",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "struct ILiquoriceSettlement.Single",
+ "name": "_order",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "string",
+ "name": "rfqId",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "trader",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "effectiveTrader",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "baseToken",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "quoteToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "baseTokenAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quoteTokenAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minFillAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quoteExpiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "hashSingleOrder",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "_hash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_signature",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "isValidSignature",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_signer",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_filledTakerAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.Order",
+ "name": "_order",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "market",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "rfqId",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "trader",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "effectiveTrader",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quoteExpiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minFillAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.BaseTokenData",
+ "name": "baseTokenData",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toRecipient",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toRepay",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toSupply",
+ "type": "uint256"
+ }
+ ]
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.QuoteTokenData",
+ "name": "quoteTokenData",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toTrader",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toWithdraw",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toBorrow",
+ "type": "uint256"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "internalType": "struct GPv2Interaction.Data[]",
+ "name": "_interactions",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ }
+ ]
+ },
+ {
+ "internalType": "struct GPv2Interaction.Hooks",
+ "name": "_hooks",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "struct GPv2Interaction.Data[]",
+ "name": "beforeSettle",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ }
+ ]
+ },
+ {
+ "internalType": "struct GPv2Interaction.Data[]",
+ "name": "afterSettle",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "internalType": "struct Signature.TypedSignature",
+ "name": "_makerSignature",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "enum Signature.Type",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum Signature.TransferCommand",
+ "name": "transferCommand",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signatureBytes",
+ "type": "bytes"
+ }
+ ]
+ },
+ {
+ "internalType": "struct Signature.TypedSignature",
+ "name": "_takerSignature",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "enum Signature.Type",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum Signature.TransferCommand",
+ "name": "transferCommand",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signatureBytes",
+ "type": "bytes"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "settle"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_signer",
+ "type": "address"
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.Single",
+ "name": "_order",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "string",
+ "name": "rfqId",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "trader",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "effectiveTrader",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "baseToken",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "quoteToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "baseTokenAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quoteTokenAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minFillAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quoteExpiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "internalType": "struct Signature.TypedSignature",
+ "name": "_makerSignature",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "enum Signature.Type",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum Signature.TransferCommand",
+ "name": "transferCommand",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signatureBytes",
+ "type": "bytes"
+ }
+ ]
+ },
+ {
+ "internalType": "uint256",
+ "name": "_filledTakerAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct Signature.TypedSignature",
+ "name": "_takerSignature",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "enum Signature.Type",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum Signature.TransferCommand",
+ "name": "transferCommand",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signatureBytes",
+ "type": "bytes"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "settleSingle"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_signer",
+ "type": "address"
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.Single",
+ "name": "_order",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "string",
+ "name": "rfqId",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "trader",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "effectiveTrader",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "baseToken",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "quoteToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "baseTokenAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quoteTokenAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minFillAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quoteExpiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "internalType": "struct Signature.TypedSignature",
+ "name": "_makerSignature",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "enum Signature.Type",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum Signature.TransferCommand",
+ "name": "transferCommand",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signatureBytes",
+ "type": "bytes"
+ }
+ ]
+ },
+ {
+ "internalType": "uint256",
+ "name": "_filledTakerAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct Signature.TypedSignature",
+ "name": "_takerSignature",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "enum Signature.Type",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum Signature.TransferCommand",
+ "name": "transferCommand",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signatureBytes",
+ "type": "bytes"
+ }
+ ]
+ },
+ {
+ "internalType": "struct Signature.TakerPermitInfo",
+ "name": "_takerPermitInfo",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint48",
+ "name": "nonce",
+ "type": "uint48"
+ },
+ {
+ "internalType": "uint48",
+ "name": "deadline",
+ "type": "uint48"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "settleSingleWithPermitsSignatures"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_signer",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_filledTakerAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.Order",
+ "name": "_order",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "market",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "rfqId",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "trader",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "effectiveTrader",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quoteExpiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minFillAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.BaseTokenData",
+ "name": "baseTokenData",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toRecipient",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toRepay",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toSupply",
+ "type": "uint256"
+ }
+ ]
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.QuoteTokenData",
+ "name": "quoteTokenData",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toTrader",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toWithdraw",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toBorrow",
+ "type": "uint256"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "internalType": "struct GPv2Interaction.Data[]",
+ "name": "_interactions",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ }
+ ]
+ },
+ {
+ "internalType": "struct GPv2Interaction.Hooks",
+ "name": "_hooks",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "struct GPv2Interaction.Data[]",
+ "name": "beforeSettle",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ }
+ ]
+ },
+ {
+ "internalType": "struct GPv2Interaction.Data[]",
+ "name": "afterSettle",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "internalType": "struct Signature.TypedSignature",
+ "name": "_makerSignature",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "enum Signature.Type",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum Signature.TransferCommand",
+ "name": "transferCommand",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signatureBytes",
+ "type": "bytes"
+ }
+ ]
+ },
+ {
+ "internalType": "struct Signature.TypedSignature",
+ "name": "_takerSignature",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "enum Signature.Type",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum Signature.TransferCommand",
+ "name": "transferCommand",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signatureBytes",
+ "type": "bytes"
+ }
+ ]
+ },
+ {
+ "internalType": "struct Signature.TakerPermitInfo",
+ "name": "_takerPermitInfo",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint48",
+ "name": "nonce",
+ "type": "uint48"
+ },
+ {
+ "internalType": "uint48",
+ "name": "deadline",
+ "type": "uint48"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "settleWithPermitsSignatures"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IRepository",
+ "name": "_repository",
+ "type": "address"
+ },
+ {
+ "internalType": "struct GPv2Interaction.Hooks",
+ "name": "_hooks",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "struct GPv2Interaction.Data[]",
+ "name": "beforeSettle",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ }
+ ]
+ },
+ {
+ "internalType": "struct GPv2Interaction.Data[]",
+ "name": "afterSettle",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "validateHooks"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract IRepository",
+ "name": "_repository",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_signer",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isPartialFill",
+ "type": "bool"
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.Order",
+ "name": "_order",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "market",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "rfqId",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "trader",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "effectiveTrader",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quoteExpiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minFillAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.BaseTokenData",
+ "name": "baseTokenData",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toRecipient",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toRepay",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toSupply",
+ "type": "uint256"
+ }
+ ]
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.QuoteTokenData",
+ "name": "quoteTokenData",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toTrader",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toWithdraw",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toBorrow",
+ "type": "uint256"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "internalType": "struct GPv2Interaction.Data[]",
+ "name": "_interactions",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "target",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "validateInteractions"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "struct ILiquoriceSettlement.Order",
+ "name": "_order",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "market",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "rfqId",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "trader",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "effectiveTrader",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quoteExpiry",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minFillAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.BaseTokenData",
+ "name": "baseTokenData",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toRecipient",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toRepay",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toSupply",
+ "type": "uint256"
+ }
+ ]
+ },
+ {
+ "internalType": "struct ILiquoriceSettlement.QuoteTokenData",
+ "name": "quoteTokenData",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toTrader",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toWithdraw",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toBorrow",
+ "type": "uint256"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "validateOrderAmounts"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_validationAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_hash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "struct Signature.TypedSignature",
+ "name": "_signature",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "enum Signature.Type",
+ "name": "signatureType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum Signature.TransferCommand",
+ "name": "transferCommand",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signatureBytes",
+ "type": "bytes"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "validateSignature"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "payable",
+ "type": "receive"
+ }
+ ],
+ "devdoc": {
+ "kind": "dev",
+ "methods": {
+ "cancelLimitOrder(uint256)": {
+ "params": {
+ "nonce": "Nonce of the order to be canceled"
+ }
+ },
+ "hashOrder((address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)))": {
+ "params": {
+ "_order": "Order data to hash"
+ },
+ "returns": {
+ "_0": "bytes32 Hash of the order"
+ }
+ },
+ "hashSingleOrder((string,uint256,address,address,address,address,uint256,uint256,uint256,uint256,address))": {
+ "params": {
+ "_order": "Single order data to hash"
+ },
+ "returns": {
+ "_0": "bytes32 Hash of the single order"
+ }
+ },
+ "isValidSignature(bytes32,bytes)": {
+ "params": {
+ "_hash": "Hash of the data",
+ "_signature": "Signature to validate"
+ },
+ "returns": {
+ "_0": "Magic value if signature is valid, otherwise 0xffffffff"
+ }
+ },
+ "settle(address,uint256,(address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)),(address,uint256,bytes)[],((address,uint256,bytes)[],(address,uint256,bytes)[]),(uint8,uint8,bytes),(uint8,uint8,bytes))": {
+ "params": {
+ "_filledTakerAmount": "Amount filled by the taker",
+ "_hooks": "Hooks to be called before and after settlement",
+ "_interactions": "Array of interaction data to be executed during settlement",
+ "_makerSignature": "Typed signature of the maker",
+ "_order": "Order data",
+ "_signer": "Address that signed the order",
+ "_takerSignature": "Typed signature of the taker"
+ }
+ },
+ "settleSingle(address,(string,uint256,address,address,address,address,uint256,uint256,uint256,uint256,address),(uint8,uint8,bytes),uint256,(uint8,uint8,bytes))": {
+ "params": {
+ "_filledTakerAmount": "Amount filled by the taker",
+ "_makerSignature": "Signature of the maker",
+ "_order": "Single order data",
+ "_signer": "Address that signed the order",
+ "_takerSignature": "Signature of the taker"
+ }
+ },
+ "validateHooks(address,((address,uint256,bytes)[],(address,uint256,bytes)[]))": {
+ "params": {
+ "_hooks": "Hooks data",
+ "_repository": "Repository interface"
+ }
+ },
+ "validateInteractions(address,address,bool,(address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)),(address,uint256,bytes)[])": {
+ "params": {
+ "_interactions": "Array of interaction data",
+ "_order": "Order data",
+ "_repository": "Repository interface",
+ "_signer": "Signer address"
+ }
+ },
+ "validateOrderAmounts((address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)))": {
+ "params": {
+ "_order": "Order data"
+ }
+ },
+ "validateSignature(address,bytes32,(uint8,uint8,bytes))": {
+ "params": {
+ "_hash": "Hash of the data",
+ "_signature": "Signature data",
+ "_validationAddress": "Address to validate against"
+ }
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {
+ "AUTHENTICATOR()": {
+ "notice": "Authenticator for verifying solvers and makers"
+ },
+ "BALANCE_MANAGER()": {
+ "notice": "Manager for handling balance transfers"
+ },
+ "REPOSITORY()": {
+ "notice": "Repository that stores data for Lending Pools"
+ },
+ "cancelLimitOrder(uint256)": {
+ "notice": "Cancels a limit order by invalidating its nonce"
+ },
+ "hashOrder((address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)))": {
+ "notice": "Computes the hash of an order"
+ },
+ "hashSingleOrder((string,uint256,address,address,address,address,uint256,uint256,uint256,uint256,address))": {
+ "notice": "Computes the hash of a single order"
+ },
+ "isValidSignature(bytes32,bytes)": {
+ "notice": "Validates a signature"
+ },
+ "settle(address,uint256,(address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)),(address,uint256,bytes)[],((address,uint256,bytes)[],(address,uint256,bytes)[]),(uint8,uint8,bytes),(uint8,uint8,bytes))": {
+ "notice": "Settles a signed order with the given interactions and hooks"
+ },
+ "settleSingle(address,(string,uint256,address,address,address,address,uint256,uint256,uint256,uint256,address),(uint8,uint8,bytes),uint256,(uint8,uint8,bytes))": {
+ "notice": "Settles a single order"
+ },
+ "validateHooks(address,((address,uint256,bytes)[],(address,uint256,bytes)[]))": {
+ "notice": "Validates hooks for an order"
+ },
+ "validateInteractions(address,address,bool,(address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)),(address,uint256,bytes)[])": {
+ "notice": "Validates interactions for an order"
+ },
+ "validateOrderAmounts((address,uint256,string,uint256,address,address,uint256,address,uint256,(address,uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256,uint256)))": {
+ "notice": "Validates the amounts in an order"
+ },
+ "validateSignature(address,bytes32,(uint8,uint8,bytes))": {
+ "notice": "Validates a signature"
+ }
+ },
+ "version": 1
+ }
+ },
+ "settings": {
+ "remappings": [
+ "@chainlink/=lib/chainlink/contracts/",
+ "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
+ "@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/",
+ "chainlink/=lib/chainlink/",
+ "contracts/=src/contracts/",
+ "ds-test/=node_modules/ds-test/src/",
+ "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
+ "forge-std/=lib/forge-std/src/",
+ "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
+ "interfaces/=src/interfaces/",
+ "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
+ "openzeppelin-contracts/=lib/openzeppelin-contracts/",
+ "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/",
+ "openzeppelin-upgrades/=lib/openzeppelin-upgrades/",
+ "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"
+ ],
+ "optimizer": {
+ "enabled": true,
+ "runs": 10000
+ },
+ "metadata": {
+ "bytecodeHash": "ipfs"
+ },
+ "compilationTarget": {
+ "src/contracts/settlement/LiquoriceSettlement.sol": "LiquoriceSettlement"
+ },
+ "evmVersion": "shanghai",
+ "libraries": {}
+ },
+ "sources": {
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol": {
+ "keccak256": "0xc92e946b954f185c3ca5ee56f9721aa73d64464456a46459384cb0ccf3c3856e",
+ "urls": [
+ "bzz-raw://ae178b4e7b259557d8b93f3dd4f6f909ac72f914a9e92676e59b8d737f0423e2",
+ "dweb:/ipfs/QmXeqyUJYzn6w8wyivQAtSzmwwFQnHaFYPvGad66RW1sPf"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol": {
+ "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7",
+ "urls": [
+ "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b",
+ "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol": {
+ "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724",
+ "urls": [
+ "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a",
+ "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
+ "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c",
+ "urls": [
+ "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba",
+ "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
+ "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7",
+ "urls": [
+ "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db",
+ "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
+ "keccak256": "0x6dd0cb67846da3fa1241c520faaa215d6bec8226e37beac6056c51e8af44d24e",
+ "urls": [
+ "bzz-raw://650e533e62b30dcc6edea2b6c91358d5659da3bde42e56adf7316c493b916a15",
+ "dweb:/ipfs/QmYkmK2vPE6FjdAoQVpZSJxamTLGno9wzGS495TcMNFViV"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol": {
+ "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a",
+ "urls": [
+ "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a",
+ "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol": {
+ "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3",
+ "urls": [
+ "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a",
+ "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": {
+ "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84",
+ "urls": [
+ "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9",
+ "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
+ "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8",
+ "urls": [
+ "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621",
+ "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol": {
+ "keccak256": "0x6f61a65c733690afafb4cf528b5677e704828c8350b60b948dbc1d3bb6d7689c",
+ "urls": [
+ "bzz-raw://00265b985b303af62ee243e10db819fa8cf890d9f122f82f4f03f55b02f62654",
+ "dweb:/ipfs/QmNneFqZn2uKK6dECxatH6aENk1EMCTETi58dGaz5NCWQe"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol": {
+ "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54",
+ "urls": [
+ "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8",
+ "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"
+ ],
+ "license": "MIT"
+ },
+ "src/contracts/lib/GPv2Interaction.sol": {
+ "keccak256": "0x55968a83f6ae3d8d806b8faf02360abc676fb7476d05f33c0c9d324e6336fd0f",
+ "urls": [
+ "bzz-raw://2d813e60c3fa006d02c8fd1aed73d2d47f9f153ac3c410d408384f3084e46de3",
+ "dweb:/ipfs/QmdNyQMmyscMH6CVUkhQQfGdKdxgqhqDEe5K4iwrvcWDsk"
+ ],
+ "license": "LGPL-3.0-or-later"
+ },
+ "src/contracts/lib/Signature.sol": {
+ "keccak256": "0xc084fe793244e2e7b0f4a51440df7dbf97d39b4ad6450a2b8a082cb6d86993b5",
+ "urls": [
+ "bzz-raw://9bff9732e68149a83f2e044c7f1700432997750166cd15f4a54f73bd68a475aa",
+ "dweb:/ipfs/QmZJMNppHQ3nUDcJhAkrMYa4QWhGLDr4Tzah6LndgrDCib"
+ ],
+ "license": "BUSL-1.1"
+ },
+ "src/contracts/settlement/BalanceManager.sol": {
+ "keccak256": "0x82d5d0de5cf88ff8882f1f7a2d05b98ed32bb3f2a6b9eab728ce55ae943e67c3",
+ "urls": [
+ "bzz-raw://ebcbe822ad5c68896a12ecd60e17ba6a2ed0ba8e0544c7ad54d88d1c25206b5c",
+ "dweb:/ipfs/QmYEZeKUEz7Nw6MW9uZHnXvkeRTmmcS1WZhx77s9kUWSWw"
+ ],
+ "license": "BUSL-1.1"
+ },
+ "src/contracts/settlement/LiquoriceSettlement.sol": {
+ "keccak256": "0xcac528919829fc8e021cec4325b38835866a7d0630b61349deae6ecfbe0ddaef",
+ "urls": [
+ "bzz-raw://6d6dafbba3885b42cb97be6d190ac1f611548ceb2116e9b6ed7da9bf422c8b58",
+ "dweb:/ipfs/QmZQk6WQNgYqsu9Z85tPF2VQGXgaYzvpEqc7VEmJ4zEEJU"
+ ],
+ "license": "BUSL-1.1"
+ },
+ "src/contracts/settlement/Signing.sol": {
+ "keccak256": "0xad9e59ae740627e5b71fa1ebde019999084480664d06d18f0a01e4d31fa32ef6",
+ "urls": [
+ "bzz-raw://ea0e0021cd0074292b04f9921f6ca3cc77a6799c86cacabb9dc6ff7dadbd7933",
+ "dweb:/ipfs/QmPjY69PntfUGW5eNrNe98DCTemq6daRqUiLFkcYvVWuvh"
+ ],
+ "license": "BUSL-1.1"
+ },
+ "src/interfaces/IACLManager.sol": {
+ "keccak256": "0xeee5cbedcfaff01733979b8f439a817aa67b09d9e330d21e11f180dceebed024",
+ "urls": [
+ "bzz-raw://814431cd9df23d0d7cc0f9761927e2aa18fc7fa599f34422f332ee6352580d69",
+ "dweb:/ipfs/QmXLdGsdMyeX5j64rAaByz35SwEMPMQ7usXwruWjEPo6Cz"
+ ],
+ "license": "MIT"
+ },
+ "src/interfaces/IAllowListAuthentication.sol": {
+ "keccak256": "0xbabb9eda80757d9355ab9863fccb3fdb1f15c1cbce458c3236d792d007077a9e",
+ "urls": [
+ "bzz-raw://f6fa97e90b315ffc3cae3998adda6810c856ea96be015e797723e13b436d1a10",
+ "dweb:/ipfs/Qme1dzXXcMDQpeqyqfuSbZDY6GKWjyrRBQrNDjitPeXQEF"
+ ],
+ "license": "MIT"
+ },
+ "src/interfaces/IBalanceManager.sol": {
+ "keccak256": "0xc4cff6f33170df6d91a866ee69263c9b90091e94027bea04038558c315e6e127",
+ "urls": [
+ "bzz-raw://867164a381fb78da320c89db6b15978becd49be61e2349abc805362904bffb4e",
+ "dweb:/ipfs/QmPY9UYCi9YVdCC8A1UxmTPcnV5BmMj93Gq1nqxBv4fMJ7"
+ ],
+ "license": "MIT"
+ },
+ "src/interfaces/IInterestRateModel.sol": {
+ "keccak256": "0xccd4c1dea98176c392de07cb8f5a2ac969405090d42d831310fa53464c0d9264",
+ "urls": [
+ "bzz-raw://a22b5b87be29e616142b6c4677e109e9246157c4b7e6378334fbc7ba403d82de",
+ "dweb:/ipfs/QmXmSF34VsktTfqSCJU8Mz9sTaXGVk7xdYQwr9NcsR3k43"
+ ],
+ "license": "MIT"
+ },
+ "src/interfaces/ILiquoriceSettlement.sol": {
+ "keccak256": "0xa4a36d51f174d9994c39287f89e63bbea57ff5adcd2a9bc649c67bb5cae75272",
+ "urls": [
+ "bzz-raw://8562fe9fc033c3e3320c5d95ad10e49f5e23ea50a5e9eaf186cbf53d9f1ce7a6",
+ "dweb:/ipfs/QmXKSjRi8oxmS5xd5V95HofYtFzYfehbL6s8t2MKoXR7y1"
+ ],
+ "license": "MIT"
+ },
+ "src/interfaces/IPriceProvider.sol": {
+ "keccak256": "0x75812be8d692287010f5ee9ce13556df1bd8299faa64b42c49cd08cf7cc53847",
+ "urls": [
+ "bzz-raw://623d4faa57b078a33a2afe0d13fc426c4a750ae7f07f9d826000047dab54148e",
+ "dweb:/ipfs/QmYmFpZnLug6FBG9C8s1mxPBjZHwiCk7cRBC7A9WXtyGKE"
+ ],
+ "license": "MIT"
+ },
+ "src/interfaces/IRepository.sol": {
+ "keccak256": "0xf08a5812ce10042564d518994db487c49d9f35d511da07a5103b9b886b6e2607",
+ "urls": [
+ "bzz-raw://b602c9f5a61c9796f711330ee56d4f0287adc656c686acf391d4e8c45453e6d0",
+ "dweb:/ipfs/QmQ7XJ1qERgRxWurpkS3t1XDtuBUTpQEz14h4eXBc8vp9t"
+ ],
+ "license": "MIT"
+ },
+ "src/interfaces/external/permit/IAllowanceTransfer.sol": {
+ "keccak256": "0x23986b17f0c10296cb8afadb43014cd7901f56dac5ba85067d18ca7db7d3e37e",
+ "urls": [
+ "bzz-raw://5f6ec55ce038e045b15a89a7f19fa45aa09d42a52517dd1846968d16777d3a9b",
+ "dweb:/ipfs/QmZXthQLUtRFgqGv3bFbijmNk5Vviacrf7VnRDbXEQjdBQ"
+ ],
+ "license": "MIT"
+ },
+ "src/interfaces/external/permit/IEIP712.sol": {
+ "keccak256": "0x07e44e64248ed6316fe1db6f44c80468b950e6d1ab4bfdf21a65cbbd27718f77",
+ "urls": [
+ "bzz-raw://58487548bc5289e7f5a4d4c278e5c7e9a7829d8a5be024a42938943f8c8fb63b",
+ "dweb:/ipfs/QmYg63mq3SgXH6H4Wyvznb1E5fEjw6W7NeLASUcRjMuKYa"
+ ],
+ "license": "MIT"
+ }
+ },
+ "version": 1
+ },
+ "id": 90,
+ "_disabled": [
+ {
+ "type": "function",
+ "name": "REPOSITORY",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract IRepository"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "cancelLimitOrder",
+ "inputs": [
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "hashBaseTokenData",
+ "inputs": [
+ {
+ "name": "_baseTokenData",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.BaseTokenData",
+ "components": [
+ {
+ "name": "addr",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toRecipient",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toRepay",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toSupply",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "hashOrder",
+ "inputs": [
+ {
+ "name": "_order",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.Order",
+ "components": [
+ {
+ "name": "market",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "chainId",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "rfqId",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "trader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "effectiveTrader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "quoteExpiry",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "recipient",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "minFillAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "baseTokenData",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.BaseTokenData",
+ "components": [
+ {
+ "name": "addr",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toRecipient",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toRepay",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toSupply",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "name": "quoteTokenData",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.QuoteTokenData",
+ "components": [
+ {
+ "name": "addr",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toTrader",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toWithdraw",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toBorrow",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "hashQuoteTokenData",
+ "inputs": [
+ {
+ "name": "_quoteTokenData",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.QuoteTokenData",
+ "components": [
+ {
+ "name": "addr",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toTrader",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toWithdraw",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toBorrow",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "settleSingleWithPermitsSignatures",
+ "inputs": [
+ {
+ "name": "_signer",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "_order",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.Single",
+ "components": [
+ {
+ "name": "rfqId",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "trader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "effectiveTrader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "baseToken",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "quoteToken",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "baseTokenAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "quoteTokenAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "minFillAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "quoteExpiry",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "recipient",
+ "type": "address",
+ "internalType": "address"
+ }
+ ]
+ },
+ {
+ "name": "_makerSignature",
+ "type": "tuple",
+ "internalType": "struct Signature.TypedSignature",
+ "components": [
+ {
+ "name": "signatureType",
+ "type": "uint8",
+ "internalType": "enum Signature.Type"
+ },
+ {
+ "name": "transferCommand",
+ "type": "uint8",
+ "internalType": "enum Signature.TransferCommand"
+ },
+ {
+ "name": "signatureBytes",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "_filledTakerAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "_takerSignature",
+ "type": "tuple",
+ "internalType": "struct Signature.TypedSignature",
+ "components": [
+ {
+ "name": "signatureType",
+ "type": "uint8",
+ "internalType": "enum Signature.Type"
+ },
+ {
+ "name": "transferCommand",
+ "type": "uint8",
+ "internalType": "enum Signature.TransferCommand"
+ },
+ {
+ "name": "signatureBytes",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "_takerPermitInfo",
+ "type": "tuple",
+ "internalType": "struct Signature.TakerPermitInfo",
+ "components": [
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "nonce",
+ "type": "uint48",
+ "internalType": "uint48"
+ },
+ {
+ "name": "deadline",
+ "type": "uint48",
+ "internalType": "uint48"
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "settleWithPermitsSignatures",
+ "inputs": [
+ {
+ "name": "_signer",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "_filledTakerAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "_order",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.Order",
+ "components": [
+ {
+ "name": "market",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "chainId",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "rfqId",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "trader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "effectiveTrader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "quoteExpiry",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "recipient",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "minFillAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "baseTokenData",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.BaseTokenData",
+ "components": [
+ {
+ "name": "addr",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toRecipient",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toRepay",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toSupply",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "name": "quoteTokenData",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.QuoteTokenData",
+ "components": [
+ {
+ "name": "addr",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toTrader",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toWithdraw",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toBorrow",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "_interactions",
+ "type": "tuple[]",
+ "internalType": "struct GPv2Interaction.Data[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "_hooks",
+ "type": "tuple",
+ "internalType": "struct GPv2Interaction.Hooks",
+ "components": [
+ {
+ "name": "beforeSettle",
+ "type": "tuple[]",
+ "internalType": "struct GPv2Interaction.Data[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "afterSettle",
+ "type": "tuple[]",
+ "internalType": "struct GPv2Interaction.Data[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "_makerSignature",
+ "type": "tuple",
+ "internalType": "struct Signature.TypedSignature",
+ "components": [
+ {
+ "name": "signatureType",
+ "type": "uint8",
+ "internalType": "enum Signature.Type"
+ },
+ {
+ "name": "transferCommand",
+ "type": "uint8",
+ "internalType": "enum Signature.TransferCommand"
+ },
+ {
+ "name": "signatureBytes",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "_takerSignature",
+ "type": "tuple",
+ "internalType": "struct Signature.TypedSignature",
+ "components": [
+ {
+ "name": "signatureType",
+ "type": "uint8",
+ "internalType": "enum Signature.Type"
+ },
+ {
+ "name": "transferCommand",
+ "type": "uint8",
+ "internalType": "enum Signature.TransferCommand"
+ },
+ {
+ "name": "signatureBytes",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "_takerPermitInfo",
+ "type": "tuple",
+ "internalType": "struct Signature.TakerPermitInfo",
+ "components": [
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "nonce",
+ "type": "uint48",
+ "internalType": "uint48"
+ },
+ {
+ "name": "deadline",
+ "type": "uint48",
+ "internalType": "uint48"
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "validateHooks",
+ "inputs": [
+ {
+ "name": "_repository",
+ "type": "address",
+ "internalType": "contract IRepository"
+ },
+ {
+ "name": "_hooks",
+ "type": "tuple",
+ "internalType": "struct GPv2Interaction.Hooks",
+ "components": [
+ {
+ "name": "beforeSettle",
+ "type": "tuple[]",
+ "internalType": "struct GPv2Interaction.Data[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "afterSettle",
+ "type": "tuple[]",
+ "internalType": "struct GPv2Interaction.Data[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "validateInteractions",
+ "inputs": [
+ {
+ "name": "_repository",
+ "type": "address",
+ "internalType": "contract IRepository"
+ },
+ {
+ "name": "_signer",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "_isPartialFill",
+ "type": "bool",
+ "internalType": "bool"
+ },
+ {
+ "name": "_order",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.Order",
+ "components": [
+ {
+ "name": "market",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "chainId",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "rfqId",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "trader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "effectiveTrader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "quoteExpiry",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "recipient",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "minFillAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "baseTokenData",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.BaseTokenData",
+ "components": [
+ {
+ "name": "addr",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toRecipient",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toRepay",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toSupply",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "name": "quoteTokenData",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.QuoteTokenData",
+ "components": [
+ {
+ "name": "addr",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toTrader",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toWithdraw",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toBorrow",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "_interactions",
+ "type": "tuple[]",
+ "internalType": "struct GPv2Interaction.Data[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "validateOrderAmounts",
+ "inputs": [
+ {
+ "name": "_order",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.Order",
+ "components": [
+ {
+ "name": "market",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "chainId",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "rfqId",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "trader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "effectiveTrader",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "quoteExpiry",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "recipient",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "minFillAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "baseTokenData",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.BaseTokenData",
+ "components": [
+ {
+ "name": "addr",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toRecipient",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toRepay",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toSupply",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "name": "quoteTokenData",
+ "type": "tuple",
+ "internalType": "struct ILiquoriceSettlement.QuoteTokenData",
+ "components": [
+ {
+ "name": "addr",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toTrader",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toWithdraw",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "toBorrow",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "validateSignature",
+ "inputs": [
+ {
+ "name": "_validationAddress",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "_hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "_signature",
+ "type": "tuple",
+ "internalType": "struct Signature.TypedSignature",
+ "components": [
+ {
+ "name": "signatureType",
+ "type": "uint8",
+ "internalType": "enum Signature.Type"
+ },
+ {
+ "name": "transferCommand",
+ "type": "uint8",
+ "internalType": "enum Signature.TransferCommand"
+ },
+ {
+ "name": "signatureBytes",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "view"
+ }
+ ]
+}
diff --git a/contracts/artifacts/MockERC4626Wrapper.json b/contracts/artifacts/MockERC4626Wrapper.json
new file mode 100644
index 0000000000..4bbe02465e
--- /dev/null
+++ b/contracts/artifacts/MockERC4626Wrapper.json
@@ -0,0 +1,240 @@
+{
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ {
+ "name": "_asset",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "_decimals",
+ "type": "uint8",
+ "internalType": "uint8"
+ },
+ {
+ "name": "_rateNumerator",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "_rateDenominator",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "allowance",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "approve",
+ "inputs": [
+ {
+ "name": "spender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "asset",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "balanceOf",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "convertToAssets",
+ "inputs": [
+ {
+ "name": "shares",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "decimals",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint8",
+ "internalType": "uint8"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "mint",
+ "inputs": [
+ {
+ "name": "to",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "rateDenominator",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "rateNumerator",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "transfer",
+ "inputs": [
+ {
+ "name": "to",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "transferFrom",
+ "inputs": [
+ {
+ "name": "from",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "to",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ }
+ ],
+ "bytecode": "0x610100604052348015610010575f5ffd5b50604051610c17380380610c1783398181016040528101906100329190610154565b8373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508260ff1660a08160ff16815250508160c081815250508060e08181525050505050506101b8565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100ba82610091565b9050919050565b6100ca816100b0565b81146100d4575f5ffd5b50565b5f815190506100e5816100c1565b92915050565b5f60ff82169050919050565b610100816100eb565b811461010a575f5ffd5b50565b5f8151905061011b816100f7565b92915050565b5f819050919050565b61013381610121565b811461013d575f5ffd5b50565b5f8151905061014e8161012a565b92915050565b5f5f5f5f6080858703121561016c5761016b61008d565b5b5f610179878288016100d7565b945050602061018a8782880161010d565b935050604061019b87828801610140565b92505060606101ac87828801610140565b91505092959194509250565b60805160a05160c05160e051610a1e6101f95f395f8181610262015261055c01525f8181610283015261034801525f6104aa01525f6104ce0152610a1e5ff3fe608060405234801561000f575f5ffd5b50600436106100a7575f3560e01c806338d52e0f1161006f57806338d52e0f1461017757806340c10f191461019557806370a08231146101b1578063865192f7146101e1578063a9059cbb146101ff578063dd62ed3e1461022f576100a7565b806307a2d13a146100ab578063095ea7b3146100db5780630b36b8db1461010b57806323b872dd14610129578063313ce56714610159575b5f5ffd5b6100c560048036038101906100c09190610684565b61025f565b6040516100d291906106be565b60405180910390f35b6100f560048036038101906100f09190610731565b6102be565b6040516101029190610789565b60405180910390f35b610113610346565b60405161012091906106be565b60405180910390f35b610143600480360381019061013e91906107a2565b61036a565b6040516101509190610789565b60405180910390f35b6101616104a8565b60405161016e919061080d565b60405180910390f35b61017f6104cc565b60405161018c9190610835565b60405180910390f35b6101af60048036038101906101aa9190610731565b6104f0565b005b6101cb60048036038101906101c6919061084e565b610546565b6040516101d891906106be565b60405180910390f35b6101e961055a565b6040516101f691906106be565b60405180910390f35b61021960048036038101906102149190610731565b61057e565b6040516102269190610789565b60405180910390f35b61024960048036038101906102449190610879565b61062d565b60405161025691906106be565b60405180910390f35b5f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000836102ad91906108e4565b6102b79190610952565b9050919050565b5f8160015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546103f29190610982565b92505081905550815f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546104449190610982565b92505081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461049691906109b5565b92505081905550600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461053b91906109b5565b925050819055505050565b5f602052805f5260405f205f915090505481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f815f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546105ca9190610982565b92505081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461061c91906109b5565b925050819055506001905092915050565b6001602052815f5260405f20602052805f5260405f205f91509150505481565b5f5ffd5b5f819050919050565b61066381610651565b811461066d575f5ffd5b50565b5f8135905061067e8161065a565b92915050565b5f602082840312156106995761069861064d565b5b5f6106a684828501610670565b91505092915050565b6106b881610651565b82525050565b5f6020820190506106d15f8301846106af565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610700826106d7565b9050919050565b610710816106f6565b811461071a575f5ffd5b50565b5f8135905061072b81610707565b92915050565b5f5f604083850312156107475761074661064d565b5b5f6107548582860161071d565b925050602061076585828601610670565b9150509250929050565b5f8115159050919050565b6107838161076f565b82525050565b5f60208201905061079c5f83018461077a565b92915050565b5f5f5f606084860312156107b9576107b861064d565b5b5f6107c68682870161071d565b93505060206107d78682870161071d565b92505060406107e886828701610670565b9150509250925092565b5f60ff82169050919050565b610807816107f2565b82525050565b5f6020820190506108205f8301846107fe565b92915050565b61082f816106f6565b82525050565b5f6020820190506108485f830184610826565b92915050565b5f602082840312156108635761086261064d565b5b5f6108708482850161071d565b91505092915050565b5f5f6040838503121561088f5761088e61064d565b5b5f61089c8582860161071d565b92505060206108ad8582860161071d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6108ee82610651565b91506108f983610651565b925082820261090781610651565b9150828204841483151761091e5761091d6108b7565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61095c82610651565b915061096783610651565b92508261097757610976610925565b5b828204905092915050565b5f61098c82610651565b915061099783610651565b92508282039050818111156109af576109ae6108b7565b5b92915050565b5f6109bf82610651565b91506109ca83610651565b92508282019050808211156109e2576109e16108b7565b5b9291505056fea2646970667358221220b5ebafab2270a2c41eb9cd473eb8aca958511fe12b7302559d197e2a8704c94b64736f6c634300081e0033"
+}
diff --git a/crates/contracts/artifacts/NonStandardERC20Balances.json b/contracts/artifacts/NonStandardERC20Balances.json
similarity index 100%
rename from crates/contracts/artifacts/NonStandardERC20Balances.json
rename to contracts/artifacts/NonStandardERC20Balances.json
diff --git a/contracts/artifacts/PancakeRouter.json b/contracts/artifacts/PancakeRouter.json
new file mode 100644
index 0000000000..c95b7fd70d
--- /dev/null
+++ b/contracts/artifacts/PancakeRouter.json
@@ -0,0 +1,957 @@
+{
+ "abi": [
+ {
+ "inputs": [],
+ "name": "WETH",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountADesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBDesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "addLiquidity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "factory",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveB",
+ "type": "uint256"
+ }
+ ],
+ "name": "quote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenDesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "addLiquidityETH",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveOut",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAmountIn",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveOut",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAmountOut",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ }
+ ],
+ "name": "getAmountsIn",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ }
+ ],
+ "name": "getAmountsOut",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidityETH",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidityETHSupportingFeeOnTransferTokens",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityETHWithPermit",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityWithPermit",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapETHForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactETHForTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactETHForTokensSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForETH",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForETHSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactETH",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ]
+}
diff --git a/crates/contracts/artifacts/Permit2.json b/contracts/artifacts/Permit2.json
similarity index 99%
rename from crates/contracts/artifacts/Permit2.json
rename to contracts/artifacts/Permit2.json
index 00537570e6..60c0727632 100644
--- a/crates/contracts/artifacts/Permit2.json
+++ b/contracts/artifacts/Permit2.json
@@ -326,6 +326,106 @@
"stateMutability": "nonpayable",
"type": "function"
},
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint160",
+ "name": "amount",
+ "type": "uint160"
+ },
+ {
+ "internalType": "uint48",
+ "name": "expiration",
+ "type": "uint48"
+ },
+ {
+ "internalType": "uint48",
+ "name": "nonce",
+ "type": "uint48"
+ }
+ ],
+ "internalType": "struct IAllowanceTransfer.PermitDetails",
+ "name": "details",
+ "type": "tuple"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "sigDeadline",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct IAllowanceTransfer.PermitSingle",
+ "name": "permitSingle",
+ "type": "tuple"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ }
+ ],
+ "name": "permit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint160",
+ "name": "amount",
+ "type": "uint160"
+ },
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "devdoc": {
+ "methods": {}
+ },
+ "userdoc": {
+ "methods": {}
+ },
+ "_disabled": [
{
"inputs": [
{
@@ -416,68 +516,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "components": [
- {
- "components": [
- {
- "internalType": "address",
- "name": "token",
- "type": "address"
- },
- {
- "internalType": "uint160",
- "name": "amount",
- "type": "uint160"
- },
- {
- "internalType": "uint48",
- "name": "expiration",
- "type": "uint48"
- },
- {
- "internalType": "uint48",
- "name": "nonce",
- "type": "uint48"
- }
- ],
- "internalType": "struct IAllowanceTransfer.PermitDetails",
- "name": "details",
- "type": "tuple"
- },
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "sigDeadline",
- "type": "uint256"
- }
- ],
- "internalType": "struct IAllowanceTransfer.PermitSingle",
- "name": "permitSingle",
- "type": "tuple"
- },
- {
- "internalType": "bytes",
- "name": "signature",
- "type": "bytes"
- }
- ],
- "name": "permit",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -625,42 +663,6 @@
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "from",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "to",
- "type": "address"
- },
- {
- "internalType": "uint160",
- "name": "amount",
- "type": "uint160"
- },
- {
- "internalType": "address",
- "name": "token",
- "type": "address"
- }
- ],
- "name": "transferFrom",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
}
- ],
- "bytecode": "0x",
- "deployedBytecode": "0x",
- "devdoc": {
- "methods": {}
- },
- "userdoc": {
- "methods": {}
- }
+ ]
}
diff --git a/crates/contracts/artifacts/RemoteERC20Balances.json b/contracts/artifacts/RemoteERC20Balances.json
similarity index 100%
rename from crates/contracts/artifacts/RemoteERC20Balances.json
rename to contracts/artifacts/RemoteERC20Balances.json
diff --git a/crates/contracts/artifacts/Signatures.json b/contracts/artifacts/Signatures.json
similarity index 100%
rename from crates/contracts/artifacts/Signatures.json
rename to contracts/artifacts/Signatures.json
diff --git a/crates/contracts/artifacts/Solver.json b/contracts/artifacts/Solver.json
similarity index 100%
rename from crates/contracts/artifacts/Solver.json
rename to contracts/artifacts/Solver.json
diff --git a/crates/contracts/artifacts/Spardose.json b/contracts/artifacts/Spardose.json
similarity index 100%
rename from crates/contracts/artifacts/Spardose.json
rename to contracts/artifacts/Spardose.json
diff --git a/contracts/artifacts/SushiSwapRouter.json b/contracts/artifacts/SushiSwapRouter.json
new file mode 100644
index 0000000000..c95b7fd70d
--- /dev/null
+++ b/contracts/artifacts/SushiSwapRouter.json
@@ -0,0 +1,957 @@
+{
+ "abi": [
+ {
+ "inputs": [],
+ "name": "WETH",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountADesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBDesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "addLiquidity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "factory",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveB",
+ "type": "uint256"
+ }
+ ],
+ "name": "quote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenDesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "addLiquidityETH",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveOut",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAmountIn",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveOut",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAmountOut",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ }
+ ],
+ "name": "getAmountsIn",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ }
+ ],
+ "name": "getAmountsOut",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidityETH",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidityETHSupportingFeeOnTransferTokens",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityETHWithPermit",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityWithPermit",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapETHForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactETHForTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactETHForTokensSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForETH",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForETHSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactETH",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ]
+}
diff --git a/crates/contracts/artifacts/Swapper.json b/contracts/artifacts/Swapper.json
similarity index 100%
rename from crates/contracts/artifacts/Swapper.json
rename to contracts/artifacts/Swapper.json
diff --git a/contracts/artifacts/SwaprRouter.json b/contracts/artifacts/SwaprRouter.json
new file mode 100644
index 0000000000..c95b7fd70d
--- /dev/null
+++ b/contracts/artifacts/SwaprRouter.json
@@ -0,0 +1,957 @@
+{
+ "abi": [
+ {
+ "inputs": [],
+ "name": "WETH",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountADesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBDesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "addLiquidity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "factory",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveB",
+ "type": "uint256"
+ }
+ ],
+ "name": "quote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenDesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "addLiquidityETH",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveOut",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAmountIn",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveOut",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAmountOut",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ }
+ ],
+ "name": "getAmountsIn",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ }
+ ],
+ "name": "getAmountsOut",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidityETH",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidityETHSupportingFeeOnTransferTokens",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityETHWithPermit",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityWithPermit",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapETHForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactETHForTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactETHForTokensSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForETH",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForETHSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactETH",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ]
+}
diff --git a/contracts/artifacts/TestnetUniswapV2Router02.json b/contracts/artifacts/TestnetUniswapV2Router02.json
new file mode 100644
index 0000000000..c95b7fd70d
--- /dev/null
+++ b/contracts/artifacts/TestnetUniswapV2Router02.json
@@ -0,0 +1,957 @@
+{
+ "abi": [
+ {
+ "inputs": [],
+ "name": "WETH",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountADesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBDesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "addLiquidity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "factory",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveB",
+ "type": "uint256"
+ }
+ ],
+ "name": "quote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenDesired",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "addLiquidityETH",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveOut",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAmountIn",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveOut",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAmountOut",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ }
+ ],
+ "name": "getAmountsIn",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ }
+ ],
+ "name": "getAmountsOut",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidity",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidityETH",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLiquidityETHSupportingFeeOnTransferTokens",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityETHWithPermit",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountToken",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountTokenMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountETHMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountETH",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "tokenB",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "liquidity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountAMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountBMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "approveMax",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removeLiquidityWithPermit",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapETHForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactETHForTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactETHForTokensSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForETH",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForETHSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountIn",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountOutMin",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactETH",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ]
+}
diff --git a/crates/contracts/artifacts/Trader.json b/contracts/artifacts/Trader.json
similarity index 100%
rename from crates/contracts/artifacts/Trader.json
rename to contracts/artifacts/Trader.json
diff --git a/crates/contracts/artifacts/UniswapV2Factory.json b/contracts/artifacts/UniswapV2Factory.json
similarity index 99%
rename from crates/contracts/artifacts/UniswapV2Factory.json
rename to contracts/artifacts/UniswapV2Factory.json
index 2d57f483c5..043c56a2c9 100644
--- a/crates/contracts/artifacts/UniswapV2Factory.json
+++ b/contracts/artifacts/UniswapV2Factory.json
@@ -44,71 +44,70 @@
"type": "event"
},
{
- "constant": true,
+ "constant": false,
"inputs": [
{
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "name": "allPairs",
- "outputs": [
+ "internalType": "address",
+ "name": "tokenA",
+ "type": "address"
+ },
{
"internalType": "address",
- "name": "",
+ "name": "tokenB",
"type": "address"
}
],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "allPairsLength",
+ "name": "createPair",
"outputs": [
{
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
+ "internalType": "address",
+ "name": "pair",
+ "type": "address"
}
],
"payable": false,
- "stateMutability": "view",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
- "constant": false,
+ "constant": true,
"inputs": [
{
"internalType": "address",
- "name": "tokenA",
+ "name": "",
"type": "address"
},
{
"internalType": "address",
- "name": "tokenB",
+ "name": "",
"type": "address"
}
],
- "name": "createPair",
+ "name": "getPair",
"outputs": [
{
"internalType": "address",
- "name": "pair",
+ "name": "",
"type": "address"
}
],
"payable": false,
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
- },
+ }
+ ],
+ "bytecode": "608060405234801561001057600080fd5b506040516136863803806136868339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055613623806100636000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a2e74af61161005b578063a2e74af6146100fd578063c9c6539614610132578063e6a439051461016d578063f46901ed146101a857610088565b8063017e7e581461008d578063094b7415146100be5780631e3dd18b146100c6578063574f2ba3146100e3575b600080fd5b6100956101db565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100956101f7565b610095600480360360208110156100dc57600080fd5b5035610213565b6100eb610247565b60408051918252519081900360200190f35b6101306004803603602081101561011357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661024d565b005b6100956004803603604081101561014857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661031a565b6100956004803603604081101561018357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661076d565b610130600480360360208110156101be57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166107a0565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6003818154811061022057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60035490565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102d357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056323a204944454e544943414c5f4144445245535345530000604482015290519081900360640190fd5b6000808373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16106103f45783856103f7565b84845b909250905073ffffffffffffffffffffffffffffffffffffffff821661047e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f556e697377617056323a205a45524f5f41444452455353000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82811660009081526002602090815260408083208585168452909152902054161561051f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f556e697377617056323a20504149525f45584953545300000000000000000000604482015290519081900360640190fd5b6060604051806020016105319061086d565b6020820181038252601f19601f82011660405250905060008383604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f5604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff84811660008181526002602081815260408084208987168086529083528185208054978d167fffffffffffffffffffffffff000000000000000000000000000000000000000098891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b600260209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16331461082657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612d748061087b8339019056fe60806040526001600c5534801561001557600080fd5b506040514690806052612d228239604080519182900360520182208282018252600a8352692ab734b9bbb0b8102b1960b11b6020938401528151808301835260018152603160f81b908401528151808401919091527fbfcc8ef98ffbf7b6c3fec7bf5185b566b9863e35a9d83acd49ad6824b5969738818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612c1d806101056000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a7146105da578063d505accf146105e2578063dd62ed3e14610640578063fff6cae91461067b576101b9565b8063ba9a7a5614610597578063bc25cf771461059f578063c45a0155146105d2576101b9565b80637ecebe00116100d35780637ecebe00146104d757806389afcb441461050a57806395d89b4114610556578063a9059cbb1461055e576101b9565b80636a6278421461046957806370a082311461049c5780637464fc3d146104cf576101b9565b806323b872dd116101665780633644e515116101405780633644e51514610416578063485cc9551461041e5780635909c0d5146104595780635a3d549314610461576101b9565b806323b872dd146103ad57806330adf81f146103f0578063313ce567146103f8576101b9565b8063095ea7b311610197578063095ea7b3146103155780630dfe16811461036257806318160ddd14610393576101b9565b8063022c0d9f146101be57806306fdde03146102595780630902f1ac146102d6575b600080fd5b610257600480360360808110156101d457600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561021857600080fd5b82018360208201111561022a57600080fd5b8035906020019184600183028401116401000000008311171561024c57600080fd5b509092509050610683565b005b610261610d57565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029b578181015183820152602001610283565b50505050905090810190601f1680156102c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102de610d90565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610de5565b604080519115158252519081900360200190f35b61036a610dfc565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61039b610e18565b60408051918252519081900360200190f35b61034e600480360360608110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610e1e565b61039b610efd565b610400610f21565b6040805160ff9092168252519081900360200190f35b61039b610f26565b6102576004803603604081101561043457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610f2c565b61039b611005565b61039b61100b565b61039b6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611011565b61039b600480360360208110156104b257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113cb565b61039b6113dd565b61039b600480360360208110156104ed57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113e3565b61053d6004803603602081101561052057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113f5565b6040805192835260208301919091528051918290030190f35b610261611892565b61034e6004803603604081101561057457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356118cb565b61039b6118d8565b610257600480360360208110156105b557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118de565b61036a611ad4565b61036a611af0565b610257600480360360e08110156105f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b0c565b61039b6004803603604081101561065657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611dd8565b610257611df5565b600c546001146106f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55841515806107075750600084115b61075c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612b2f6025913960400191505060405180910390fd5b600080610767610d90565b5091509150816dffffffffffffffffffffffffffff168710801561079a5750806dffffffffffffffffffffffffffff1686105b6107ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b786021913960400191505060405180910390fd5b600654600754600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061085457508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6108bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f556e697377617056323a20494e56414c49445f544f0000000000000000000000604482015290519081900360640190fd5b8a156108d0576108d0828a8d611fdb565b89156108e1576108e1818a8c611fdb565b86156109c3578873ffffffffffffffffffffffffffffffffffffffff166310d1e85c338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610a2f57600080fd5b505afa158015610a43573d6000803e3d6000fd5b505050506040513d6020811015610a5957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916370a0823191602480820192602092909190829003018186803b158015610acb57600080fd5b505afa158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a90038311610b1f576000610b35565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610b59576000610b6f565b89856dffffffffffffffffffffffffffff160383035b90506000821180610b805750600081115b610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612b546024913960400191505060405180910390fd5b6000610c09610beb84600363ffffffff6121e816565b610bfd876103e863ffffffff6121e816565b9063ffffffff61226e16565b90506000610c21610beb84600363ffffffff6121e816565b9050610c59620f4240610c4d6dffffffffffffffffffffffffffff8b8116908b1663ffffffff6121e816565b9063ffffffff6121e816565b610c69838363ffffffff6121e816565b1015610cd657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f556e697377617056323a204b0000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610ce4848488886122e0565b60408051838152602081018390528082018d9052606081018c9052905173ffffffffffffffffffffffffffffffffffffffff8b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600a81526020017f556e69737761702056320000000000000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610df233848461259c565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610ee85773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610eb6908363ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610ef384848461260b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff163314610fb257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c5460011461108457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611094610d90565b50600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561110e57600080fd5b505afa158015611122573d6000803e3d6000fd5b505050506040513d602081101561113857600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b1580156111b157600080fd5b505afa1580156111c5573d6000803e3d6000fd5b505050506040513d60208110156111db57600080fd5b505190506000611201836dffffffffffffffffffffffffffff871663ffffffff61226e16565b90506000611225836dffffffffffffffffffffffffffff871663ffffffff61226e16565b9050600061123387876126ec565b600054909150806112705761125c6103e8610bfd611257878763ffffffff6121e816565b612878565b985061126b60006103e86128ca565b6112cd565b6112ca6dffffffffffffffffffffffffffff8916611294868463ffffffff6121e816565b8161129b57fe5b046dffffffffffffffffffffffffffff89166112bd868563ffffffff6121e816565b816112c457fe5b0461297a565b98505b60008911611326576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612bc16028913960400191505060405180910390fd5b6113308a8a6128ca565b61133c86868a8a6122e0565b811561137e5760085461137a906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121e816565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461146957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611479610d90565b50600654600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b1580156114fb57600080fd5b505afa15801561150f573d6000803e3d6000fd5b505050506040513d602081101561152557600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b15801561159957600080fd5b505afa1580156115ad573d6000803e3d6000fd5b505050506040513d60208110156115c357600080fd5b5051306000908152600160205260408120549192506115e288886126ec565b600054909150806115f9848763ffffffff6121e816565b8161160057fe5b049a5080611614848663ffffffff6121e816565b8161161b57fe5b04995060008b11801561162e575060008a115b611683576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612b996028913960400191505060405180910390fd5b61168d3084612992565b611698878d8d611fdb565b6116a3868d8c611fdb565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b15801561170f57600080fd5b505afa158015611723573d6000803e3d6000fd5b505050506040513d602081101561173957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d60208110156117d557600080fd5b505193506117e585858b8b6122e0565b811561182757600854611823906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121e816565b600b555b604080518c8152602081018c9052815173ffffffffffffffffffffffffffffffffffffffff8f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600681526020017f554e492d5632000000000000000000000000000000000000000000000000000081525081565b6000610df233848461260b565b6103e881565b600c5460011461194f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9485169490931692611a2b9285928792611a26926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b1580156119ee57600080fd5b505afa158015611a02573d6000803e3d6000fd5b505050506040513d6020811015611a1857600080fd5b50519063ffffffff61226e16565b611fdb565b600854604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611aca9284928792611a26926e01000000000000000000000000000090046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff8616916370a0823191602480820192602092909190829003018186803b1580156119ee57600080fd5b50506001600c5550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b42841015611b7b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e697377617056323a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611cdc573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611d5757508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611dc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611dcd89898961259c565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611e6657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611fd49273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015611edd57600080fd5b505afa158015611ef1573d6000803e3d6000fd5b505050506040513d6020811015611f0757600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b158015611f7a57600080fd5b505afa158015611f8e573d6000803e3d6000fd5b505050506040513d6020811015611fa457600080fd5b50516008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166122e0565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106120e157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016120a4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612143576040519150601f19603f3d011682016040523d82523d6000602084013e612148565b606091505b5091509150818015612176575080511580612176575080806020019051602081101561217357600080fd5b50515b6121e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b60008115806122035750508082028282828161220057fe5b04145b610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061230c57506dffffffffffffffffffffffffffff8311155b61237757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e697377617056323a204f564552464c4f5700000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c0100000000000000000000000000000000000000000000000000000000900481168203908116158015906123c757506dffffffffffffffffffffffffffff841615155b80156123e257506dffffffffffffffffffffffffffff831615155b15612492578063ffffffff16612425856123fb86612a57565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff612a7b16565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff8116612465846123fb87612a57565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612641908263ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612683908263ffffffff612abc16565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561275757600080fd5b505afa15801561276b573d6000803e3d6000fd5b505050506040513d602081101561278157600080fd5b5051600b5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061286457801561285f5760006127d86112576dffffffffffffffffffffffffffff88811690881663ffffffff6121e816565b905060006127e583612878565b90508082111561285c576000612813612804848463ffffffff61226e16565b6000549063ffffffff6121e816565b905060006128388361282c86600563ffffffff6121e816565b9063ffffffff612abc16565b9050600081838161284557fe5b04905080156128585761285887826128ca565b5050505b50505b612870565b8015612870576000600b555b505092915050565b600060038211156128bb575080600160028204015b818110156128b5578091506002818285816128a457fe5b0401816128ad57fe5b04905061288d565b506128c5565b81156128c5575060015b919050565b6000546128dd908263ffffffff612abc16565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054612915908263ffffffff612abc16565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818310612989578161298b565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546129c8908263ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081209190915554612a02908263ffffffff61226e16565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841681612ab457fe5b049392505050565b80820182811015610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a723158207dca18479e58487606bf70c79e44d8dee62353c9ee6d01f9a9d70885b8765f2264736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a265627a7a723158202760f92d7fa1db6f5aa16307bad65df4ebcc8550c4b1f03755ab8dfd830c178f64736f6c63430005100032",
+ "_disabled": [
{
"constant": true,
- "inputs": [],
- "name": "feeTo",
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "allPairs",
"outputs": [
{
"internalType": "address",
@@ -123,12 +122,12 @@
{
"constant": true,
"inputs": [],
- "name": "feeToSetter",
+ "name": "allPairsLength",
"outputs": [
{
- "internalType": "address",
+ "internalType": "uint256",
"name": "",
- "type": "address"
+ "type": "uint256"
}
],
"payable": false,
@@ -137,19 +136,23 @@
},
{
"constant": true,
- "inputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- },
+ "inputs": [],
+ "name": "feeTo",
+ "outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
- "name": "getPair",
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "feeToSetter",
"outputs": [
{
"internalType": "address",
@@ -191,6 +194,5 @@
"stateMutability": "nonpayable",
"type": "function"
}
- ],
- "bytecode": "608060405234801561001057600080fd5b506040516136863803806136868339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055613623806100636000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a2e74af61161005b578063a2e74af6146100fd578063c9c6539614610132578063e6a439051461016d578063f46901ed146101a857610088565b8063017e7e581461008d578063094b7415146100be5780631e3dd18b146100c6578063574f2ba3146100e3575b600080fd5b6100956101db565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100956101f7565b610095600480360360208110156100dc57600080fd5b5035610213565b6100eb610247565b60408051918252519081900360200190f35b6101306004803603602081101561011357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661024d565b005b6100956004803603604081101561014857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661031a565b6100956004803603604081101561018357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661076d565b610130600480360360208110156101be57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166107a0565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6003818154811061022057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60035490565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102d357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056323a204944454e544943414c5f4144445245535345530000604482015290519081900360640190fd5b6000808373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16106103f45783856103f7565b84845b909250905073ffffffffffffffffffffffffffffffffffffffff821661047e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f556e697377617056323a205a45524f5f41444452455353000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82811660009081526002602090815260408083208585168452909152902054161561051f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f556e697377617056323a20504149525f45584953545300000000000000000000604482015290519081900360640190fd5b6060604051806020016105319061086d565b6020820181038252601f19601f82011660405250905060008383604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f5604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b15801561065e57600080fd5b505af1158015610672573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff84811660008181526002602081815260408084208987168086529083528185208054978d167fffffffffffffffffffffffff000000000000000000000000000000000000000098891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b600260209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16331461082657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612d748061087b8339019056fe60806040526001600c5534801561001557600080fd5b506040514690806052612d228239604080519182900360520182208282018252600a8352692ab734b9bbb0b8102b1960b11b6020938401528151808301835260018152603160f81b908401528151808401919091527fbfcc8ef98ffbf7b6c3fec7bf5185b566b9863e35a9d83acd49ad6824b5969738818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612c1d806101056000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a7146105da578063d505accf146105e2578063dd62ed3e14610640578063fff6cae91461067b576101b9565b8063ba9a7a5614610597578063bc25cf771461059f578063c45a0155146105d2576101b9565b80637ecebe00116100d35780637ecebe00146104d757806389afcb441461050a57806395d89b4114610556578063a9059cbb1461055e576101b9565b80636a6278421461046957806370a082311461049c5780637464fc3d146104cf576101b9565b806323b872dd116101665780633644e515116101405780633644e51514610416578063485cc9551461041e5780635909c0d5146104595780635a3d549314610461576101b9565b806323b872dd146103ad57806330adf81f146103f0578063313ce567146103f8576101b9565b8063095ea7b311610197578063095ea7b3146103155780630dfe16811461036257806318160ddd14610393576101b9565b8063022c0d9f146101be57806306fdde03146102595780630902f1ac146102d6575b600080fd5b610257600480360360808110156101d457600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561021857600080fd5b82018360208201111561022a57600080fd5b8035906020019184600183028401116401000000008311171561024c57600080fd5b509092509050610683565b005b610261610d57565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029b578181015183820152602001610283565b50505050905090810190601f1680156102c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102de610d90565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610de5565b604080519115158252519081900360200190f35b61036a610dfc565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61039b610e18565b60408051918252519081900360200190f35b61034e600480360360608110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610e1e565b61039b610efd565b610400610f21565b6040805160ff9092168252519081900360200190f35b61039b610f26565b6102576004803603604081101561043457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610f2c565b61039b611005565b61039b61100b565b61039b6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611011565b61039b600480360360208110156104b257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113cb565b61039b6113dd565b61039b600480360360208110156104ed57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113e3565b61053d6004803603602081101561052057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113f5565b6040805192835260208301919091528051918290030190f35b610261611892565b61034e6004803603604081101561057457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356118cb565b61039b6118d8565b610257600480360360208110156105b557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118de565b61036a611ad4565b61036a611af0565b610257600480360360e08110156105f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b0c565b61039b6004803603604081101561065657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611dd8565b610257611df5565b600c546001146106f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55841515806107075750600084115b61075c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612b2f6025913960400191505060405180910390fd5b600080610767610d90565b5091509150816dffffffffffffffffffffffffffff168710801561079a5750806dffffffffffffffffffffffffffff1686105b6107ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b786021913960400191505060405180910390fd5b600654600754600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061085457508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6108bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f556e697377617056323a20494e56414c49445f544f0000000000000000000000604482015290519081900360640190fd5b8a156108d0576108d0828a8d611fdb565b89156108e1576108e1818a8c611fdb565b86156109c3578873ffffffffffffffffffffffffffffffffffffffff166310d1e85c338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610a2f57600080fd5b505afa158015610a43573d6000803e3d6000fd5b505050506040513d6020811015610a5957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916370a0823191602480820192602092909190829003018186803b158015610acb57600080fd5b505afa158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a90038311610b1f576000610b35565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610b59576000610b6f565b89856dffffffffffffffffffffffffffff160383035b90506000821180610b805750600081115b610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612b546024913960400191505060405180910390fd5b6000610c09610beb84600363ffffffff6121e816565b610bfd876103e863ffffffff6121e816565b9063ffffffff61226e16565b90506000610c21610beb84600363ffffffff6121e816565b9050610c59620f4240610c4d6dffffffffffffffffffffffffffff8b8116908b1663ffffffff6121e816565b9063ffffffff6121e816565b610c69838363ffffffff6121e816565b1015610cd657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f556e697377617056323a204b0000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610ce4848488886122e0565b60408051838152602081018390528082018d9052606081018c9052905173ffffffffffffffffffffffffffffffffffffffff8b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600a81526020017f556e69737761702056320000000000000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610df233848461259c565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610ee85773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610eb6908363ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610ef384848461260b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff163314610fb257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f556e697377617056323a20464f5242494444454e000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c5460011461108457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611094610d90565b50600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561110e57600080fd5b505afa158015611122573d6000803e3d6000fd5b505050506040513d602081101561113857600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b1580156111b157600080fd5b505afa1580156111c5573d6000803e3d6000fd5b505050506040513d60208110156111db57600080fd5b505190506000611201836dffffffffffffffffffffffffffff871663ffffffff61226e16565b90506000611225836dffffffffffffffffffffffffffff871663ffffffff61226e16565b9050600061123387876126ec565b600054909150806112705761125c6103e8610bfd611257878763ffffffff6121e816565b612878565b985061126b60006103e86128ca565b6112cd565b6112ca6dffffffffffffffffffffffffffff8916611294868463ffffffff6121e816565b8161129b57fe5b046dffffffffffffffffffffffffffff89166112bd868563ffffffff6121e816565b816112c457fe5b0461297a565b98505b60008911611326576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612bc16028913960400191505060405180910390fd5b6113308a8a6128ca565b61133c86868a8a6122e0565b811561137e5760085461137a906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121e816565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461146957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611479610d90565b50600654600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b1580156114fb57600080fd5b505afa15801561150f573d6000803e3d6000fd5b505050506040513d602081101561152557600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b15801561159957600080fd5b505afa1580156115ad573d6000803e3d6000fd5b505050506040513d60208110156115c357600080fd5b5051306000908152600160205260408120549192506115e288886126ec565b600054909150806115f9848763ffffffff6121e816565b8161160057fe5b049a5080611614848663ffffffff6121e816565b8161161b57fe5b04995060008b11801561162e575060008a115b611683576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612b996028913960400191505060405180910390fd5b61168d3084612992565b611698878d8d611fdb565b6116a3868d8c611fdb565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b15801561170f57600080fd5b505afa158015611723573d6000803e3d6000fd5b505050506040513d602081101561173957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b1580156117ab57600080fd5b505afa1580156117bf573d6000803e3d6000fd5b505050506040513d60208110156117d557600080fd5b505193506117e585858b8b6122e0565b811561182757600854611823906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff6121e816565b600b555b604080518c8152602081018c9052815173ffffffffffffffffffffffffffffffffffffffff8f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600681526020017f554e492d5632000000000000000000000000000000000000000000000000000081525081565b6000610df233848461260b565b6103e881565b600c5460011461194f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9485169490931692611a2b9285928792611a26926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b1580156119ee57600080fd5b505afa158015611a02573d6000803e3d6000fd5b505050506040513d6020811015611a1857600080fd5b50519063ffffffff61226e16565b611fdb565b600854604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611aca9284928792611a26926e01000000000000000000000000000090046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff8616916370a0823191602480820192602092909190829003018186803b1580156119ee57600080fd5b50506001600c5550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b42841015611b7b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e697377617056323a20455850495245440000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611cdc573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611d5757508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611dc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611dcd89898961259c565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611e6657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f556e697377617056323a204c4f434b4544000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611fd49273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015611edd57600080fd5b505afa158015611ef1573d6000803e3d6000fd5b505050506040513d6020811015611f0757600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b158015611f7a57600080fd5b505afa158015611f8e573d6000803e3d6000fd5b505050506040513d6020811015611fa457600080fd5b50516008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166122e0565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106120e157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016120a4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612143576040519150601f19603f3d011682016040523d82523d6000602084013e612148565b606091505b5091509150818015612176575080511580612176575080806020019051602081101561217357600080fd5b50515b6121e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b60008115806122035750508082028282828161220057fe5b04145b610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061230c57506dffffffffffffffffffffffffffff8311155b61237757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e697377617056323a204f564552464c4f5700000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c0100000000000000000000000000000000000000000000000000000000900481168203908116158015906123c757506dffffffffffffffffffffffffffff841615155b80156123e257506dffffffffffffffffffffffffffff831615155b15612492578063ffffffff16612425856123fb86612a57565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff612a7b16565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff8116612465846123fb87612a57565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612641908263ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612683908263ffffffff612abc16565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561275757600080fd5b505afa15801561276b573d6000803e3d6000fd5b505050506040513d602081101561278157600080fd5b5051600b5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061286457801561285f5760006127d86112576dffffffffffffffffffffffffffff88811690881663ffffffff6121e816565b905060006127e583612878565b90508082111561285c576000612813612804848463ffffffff61226e16565b6000549063ffffffff6121e816565b905060006128388361282c86600563ffffffff6121e816565b9063ffffffff612abc16565b9050600081838161284557fe5b04905080156128585761285887826128ca565b5050505b50505b612870565b8015612870576000600b555b505092915050565b600060038211156128bb575080600160028204015b818110156128b5578091506002818285816128a457fe5b0401816128ad57fe5b04905061288d565b506128c5565b81156128c5575060015b919050565b6000546128dd908263ffffffff612abc16565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054612915908263ffffffff612abc16565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818310612989578161298b565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546129c8908263ffffffff61226e16565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081209190915554612a02908263ffffffff61226e16565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841681612ab457fe5b049392505050565b80820182811015610df657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a723158207dca18479e58487606bf70c79e44d8dee62353c9ee6d01f9a9d70885b8765f2264736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a265627a7a723158202760f92d7fa1db6f5aa16307bad65df4ebcc8550c4b1f03755ab8dfd830c178f64736f6c63430005100032"
-}
\ No newline at end of file
+ ]
+}
diff --git a/crates/contracts/artifacts/UniswapV2Router02.json b/contracts/artifacts/UniswapV2Router02.json
similarity index 99%
rename from crates/contracts/artifacts/UniswapV2Router02.json
rename to contracts/artifacts/UniswapV2Router02.json
index 49d90c0289..93f965d0d8 100644
--- a/crates/contracts/artifacts/UniswapV2Router02.json
+++ b/contracts/artifacts/UniswapV2Router02.json
@@ -16,6 +16,10 @@
"stateMutability": "nonpayable",
"type": "constructor"
},
+ {
+ "stateMutability": "payable",
+ "type": "receive"
+ },
{
"inputs": [],
"name": "WETH",
@@ -93,6 +97,90 @@
"stateMutability": "nonpayable",
"type": "function"
},
+ {
+ "inputs": [],
+ "name": "factory",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveA",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "reserveB",
+ "type": "uint256"
+ }
+ ],
+ "name": "quote",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountB",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountOut",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amountInMax",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "path",
+ "type": "address[]"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ }
+ ],
+ "name": "swapTokensForExactTokens",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "60c06040523480156200001157600080fd5b506040516200573e3803806200573e833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6155b762000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb528061444a528061448d52806147ed52806149ce5280614f49528061502a52806150aa52506155b76000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613cff565b50965096945050505050565b6000610f44848484613e3c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140c6565b8560008151811061124a57fe5b60200260200101516141b1565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614381915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613cff565b509695505050505050565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484614608565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140c6565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b61183d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154986027913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140c6565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6141b1565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614796915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b2916565b1015611d8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614796915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613cff565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b5095945050505050565b6000610f44848484614b9b565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6126027f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154986027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614cbf565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613cff565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614796915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140c6565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d9f565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154bf6026913960400191505060405180910390fd5b8986101561305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154256026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f60565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140c6565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614ef2565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e6140c6565b90506132db8d3383886141b1565b6132e78c3383876141b1565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614ef2565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140c6565b90506134aa8b3383886141b1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613cff565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6138867f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154986027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613cff565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d7657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d39565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dd8576040519150601f19603f3d011682016040523d82523d6000602084013e613ddd565b606091505b5050905080613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154e56023913960400191505060405180910390fd5b505050565b6000808411613e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615557602b913960400191505060405180910390fd5b600083118015613ea65750600082115b613efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061544b6028913960400191505060405180910390fd5b6000613f0f856103e563ffffffff6151f316565b90506000613f23828563ffffffff6151f316565b90506000613f4983613f3d886103e863ffffffff6151f316565b9063ffffffff61527916565b9050808281613f5457fe5b04979650505050505050565b6060600282511015613fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613feb57600080fd5b50604051908082528060200260200182016040528015614015578160200160208202803683370190505b509050828160008151811061402657fe5b60200260200101818152505060005b60018351038110156140be576000806140788786858151811061405457fe5b602002602001015187866001018151811061406b57fe5b60200260200101516152eb565b9150915061409a84848151811061408b57fe5b60200260200101518383613e3c565b8484600101815181106140a957fe5b60209081029190910101525050600101614035565b509392505050565b60008060006140d58585614d9f565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061428f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614252565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b5091509150818015614324575080511580614324575080806020019051602081101561432157600080fd5b50515b614379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155336024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156146025760008084838151811061439f57fe5b60200260200101518584600101815181106143b657fe5b60200260200101519150915060006143ce8383614d9f565b50905060008785600101815181106143e257fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461442a5782600061442e565b6000835b91509150600060028a510388106144455788614486565b6144867f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061447957fe5b60200260200101516140c6565b90506144b37f000000000000000000000000000000000000000000000000000000000000000088886140c6565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144fd576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614588578181015183820152602001614570565b50505050905090810190601f1680156145b55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145d757600080fd5b505af11580156145eb573d6000803e3d6000fd5b505060019099019850614384975050505050505050565b50505050565b606060028251101561467b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561469357600080fd5b506040519080825280602002602001820160405280156146bd578160200160208202803683370190505b50905082816001835103815181106146d157fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140be576000806147318786600186038151811061471d57fe5b602002602001015187868151811061406b57fe5b9150915061475384848151811061474457fe5b60200260200101518383614b9b565b84600185038151811061476257fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614701565b60005b6001835103811015613e37576000808483815181106147b457fe5b60200260200101518584600101815181106147cb57fe5b60200260200101519150915060006147e38383614d9f565b50905060006148137f000000000000000000000000000000000000000000000000000000000000000085856140c6565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561486157600080fd5b505afa158015614875573d6000803e3d6000fd5b505050506040513d606081101561488b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146148d55782846148d8565b83835b9150915061495d828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b955061496a868383613e3c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146149ae578260006149b2565b6000835b91509150600060028c51038a106149c9578a6149fd565b6149fd7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061447957fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614aad578181015183820152602001614a95565b50505050905090810190601f168015614ada5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614afc57600080fd5b505af1158015614b10573d6000803e3d6000fd5b50506001909b019a506147999950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806153d4602c913960400191505060405180910390fd5b600083118015614c055750600082115b614c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061544b6028913960400191505060405180910390fd5b6000614c7e6103e8614c72868863ffffffff6151f316565b9063ffffffff6151f316565b90506000614c986103e5614c72868963ffffffff614b2916565b9050614cb56001828481614ca857fe5b049063ffffffff61527916565b9695505050505050565b6000808411614d19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154736025913960400191505060405180910390fd5b600083118015614d295750600082115b614d7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061544b6028913960400191505060405180910390fd5b82614d8f858463ffffffff6151f316565b81614d9657fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154006025913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e61578284614e64565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614eeb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614f9257600080fd5b505afa158015614fa6573d6000803e3d6000fd5b505050506040513d6020811015614fbc57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150a257604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561507557600080fd5b505af1158015615089573d6000803e3d6000fd5b505050506040513d602081101561509f57600080fd5b50505b6000806150d07f00000000000000000000000000000000000000000000000000000000000000008b8b6152eb565b915091508160001480156150e2575080155b156150f2578793508692506151e6565b60006150ff898484614cbf565b905087811161516c5785811015615161576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154256026913960400191505060405180910390fd5b8894509250826151e4565b6000615179898486614cbf565b90508981111561518557fe5b878110156151de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154bf6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061520e5750508082028282828161520b57fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152fa8585614d9f565b50905060008061530b8888886140c6565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561535057600080fd5b505afa158015615364573d6000803e3d6000fd5b505050506040513d606081101561537a57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146153c15780826153c4565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54a26469706673582212206dd6e03c4b2c0a8e55214926227ae9e2d6f9fec2ce74a6446d615afa355c84f364736f6c63430006060033",
+ "_disabled": [
{
"inputs": [
{
@@ -147,19 +235,6 @@
"stateMutability": "payable",
"type": "function"
},
- {
- "inputs": [],
- "name": "factory",
- "outputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -266,35 +341,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "amountA",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "reserveA",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "reserveB",
- "type": "uint256"
- }
- ],
- "name": "quote",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "amountB",
- "type": "uint256"
- }
- ],
- "stateMutability": "pure",
- "type": "function"
- },
{
"inputs": [
{
@@ -927,50 +973,6 @@
],
"stateMutability": "nonpayable",
"type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "amountOut",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "amountInMax",
- "type": "uint256"
- },
- {
- "internalType": "address[]",
- "name": "path",
- "type": "address[]"
- },
- {
- "internalType": "address",
- "name": "to",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "deadline",
- "type": "uint256"
- }
- ],
- "name": "swapTokensForExactTokens",
- "outputs": [
- {
- "internalType": "uint256[]",
- "name": "amounts",
- "type": "uint256[]"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "stateMutability": "payable",
- "type": "receive"
}
- ],
- "bytecode": "60c06040523480156200001157600080fd5b506040516200573e3803806200573e833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6155b762000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb528061444a528061448d52806147ed52806149ce5280614f49528061502a52806150aa52506155b76000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613cff565b50965096945050505050565b6000610f44848484613e3c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140c6565b8560008151811061124a57fe5b60200260200101516141b1565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614381915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613cff565b509695505050505050565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484614608565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140c6565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b61183d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154986027913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140c6565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6141b1565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614796915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b2916565b1015611d8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614796915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613cff565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615508602b913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b5095945050505050565b6000610f44848484614b9b565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6126027f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154986027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614cbf565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613cff565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614796915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140c6565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d9f565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154bf6026913960400191505060405180910390fd5b8986101561305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154256026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f60565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140c6565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614ef2565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e6140c6565b90506132db8d3383886141b1565b6132e78c3383876141b1565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614ef2565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140c6565b90506134aa8b3383886141b1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613cff565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6138867f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154986027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613cff565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d7657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d39565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dd8576040519150601f19603f3d011682016040523d82523d6000602084013e613ddd565b606091505b5050905080613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154e56023913960400191505060405180910390fd5b505050565b6000808411613e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615557602b913960400191505060405180910390fd5b600083118015613ea65750600082115b613efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061544b6028913960400191505060405180910390fd5b6000613f0f856103e563ffffffff6151f316565b90506000613f23828563ffffffff6151f316565b90506000613f4983613f3d886103e863ffffffff6151f316565b9063ffffffff61527916565b9050808281613f5457fe5b04979650505050505050565b6060600282511015613fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613feb57600080fd5b50604051908082528060200260200182016040528015614015578160200160208202803683370190505b509050828160008151811061402657fe5b60200260200101818152505060005b60018351038110156140be576000806140788786858151811061405457fe5b602002602001015187866001018151811061406b57fe5b60200260200101516152eb565b9150915061409a84848151811061408b57fe5b60200260200101518383613e3c565b8484600101815181106140a957fe5b60209081029190910101525050600101614035565b509392505050565b60008060006140d58585614d9f565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061428f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614252565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b5091509150818015614324575080511580614324575080806020019051602081101561432157600080fd5b50515b614379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155336024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156146025760008084838151811061439f57fe5b60200260200101518584600101815181106143b657fe5b60200260200101519150915060006143ce8383614d9f565b50905060008785600101815181106143e257fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461442a5782600061442e565b6000835b91509150600060028a510388106144455788614486565b6144867f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061447957fe5b60200260200101516140c6565b90506144b37f000000000000000000000000000000000000000000000000000000000000000088886140c6565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144fd576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614588578181015183820152602001614570565b50505050905090810190601f1680156145b55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145d757600080fd5b505af11580156145eb573d6000803e3d6000fd5b505060019099019850614384975050505050505050565b50505050565b606060028251101561467b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561469357600080fd5b506040519080825280602002602001820160405280156146bd578160200160208202803683370190505b50905082816001835103815181106146d157fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140be576000806147318786600186038151811061471d57fe5b602002602001015187868151811061406b57fe5b9150915061475384848151811061474457fe5b60200260200101518383614b9b565b84600185038151811061476257fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614701565b60005b6001835103811015613e37576000808483815181106147b457fe5b60200260200101518584600101815181106147cb57fe5b60200260200101519150915060006147e38383614d9f565b50905060006148137f000000000000000000000000000000000000000000000000000000000000000085856140c6565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561486157600080fd5b505afa158015614875573d6000803e3d6000fd5b505050506040513d606081101561488b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146148d55782846148d8565b83835b9150915061495d828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b955061496a868383613e3c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146149ae578260006149b2565b6000835b91509150600060028c51038a106149c9578a6149fd565b6149fd7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061447957fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614aad578181015183820152602001614a95565b50505050905090810190601f168015614ada5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614afc57600080fd5b505af1158015614b10573d6000803e3d6000fd5b50506001909b019a506147999950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806153d4602c913960400191505060405180910390fd5b600083118015614c055750600082115b614c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061544b6028913960400191505060405180910390fd5b6000614c7e6103e8614c72868863ffffffff6151f316565b9063ffffffff6151f316565b90506000614c986103e5614c72868963ffffffff614b2916565b9050614cb56001828481614ca857fe5b049063ffffffff61527916565b9695505050505050565b6000808411614d19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154736025913960400191505060405180910390fd5b600083118015614d295750600082115b614d7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061544b6028913960400191505060405180910390fd5b82614d8f858463ffffffff6151f316565b81614d9657fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154006025913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e61578284614e64565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614eeb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614f9257600080fd5b505afa158015614fa6573d6000803e3d6000fd5b505050506040513d6020811015614fbc57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150a257604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561507557600080fd5b505af1158015615089573d6000803e3d6000fd5b505050506040513d602081101561509f57600080fd5b50505b6000806150d07f00000000000000000000000000000000000000000000000000000000000000008b8b6152eb565b915091508160001480156150e2575080155b156150f2578793508692506151e6565b60006150ff898484614cbf565b905087811161516c5785811015615161576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154256026913960400191505060405180910390fd5b8894509250826151e4565b6000615179898486614cbf565b90508981111561518557fe5b878110156151de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154bf6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061520e5750508082028282828161520b57fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152fa8585614d9f565b50905060008061530b8888886140c6565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561535057600080fd5b505afa158015615364573d6000803e3d6000fd5b505050506040513d606081101561537a57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146153c15780826153c4565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54a26469706673582212206dd6e03c4b2c0a8e55214926227ae9e2d6f9fec2ce74a6446d615afa355c84f364736f6c63430006060033"
-}
\ No newline at end of file
+ ]
+}
diff --git a/crates/contracts/artifacts/UniswapV3Pool.json b/contracts/artifacts/UniswapV3Pool.json
similarity index 99%
rename from crates/contracts/artifacts/UniswapV3Pool.json
rename to contracts/artifacts/UniswapV3Pool.json
index 87969854f7..8e04b0b6b5 100644
--- a/crates/contracts/artifacts/UniswapV3Pool.json
+++ b/contracts/artifacts/UniswapV3Pool.json
@@ -410,40 +410,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint128",
- "name": "amount0Requested",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "amount1Requested",
- "type": "uint128"
- }
- ],
- "name": "collectProtocol",
- "outputs": [
- {
- "internalType": "uint128",
- "name": "amount0",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "amount1",
- "type": "uint128"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [],
"name": "factory",
@@ -470,32 +436,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [],
- "name": "feeGrowthGlobal0X128",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "feeGrowthGlobal1X128",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -524,19 +464,6 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "uint16",
- "name": "observationCardinalityNext",
- "type": "uint16"
- }
- ],
- "name": "increaseObservationCardinalityNext",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
@@ -563,19 +490,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [],
- "name": "maxLiquidityPerTick",
- "outputs": [
- {
- "internalType": "uint128",
- "name": "",
- "type": "uint128"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -738,151 +652,179 @@
{
"inputs": [
{
- "internalType": "uint8",
- "name": "feeProtocol0",
- "type": "uint8"
- },
- {
- "internalType": "uint8",
- "name": "feeProtocol1",
- "type": "uint8"
- }
- ],
- "name": "setFeeProtocol",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "slot0",
- "outputs": [
- {
- "internalType": "uint160",
- "name": "sqrtPriceX96",
- "type": "uint160"
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
},
{
- "internalType": "int24",
- "name": "tick",
- "type": "int24"
+ "internalType": "bool",
+ "name": "zeroForOne",
+ "type": "bool"
},
{
- "internalType": "uint16",
- "name": "observationIndex",
- "type": "uint16"
+ "internalType": "int256",
+ "name": "amountSpecified",
+ "type": "int256"
},
{
- "internalType": "uint16",
- "name": "observationCardinality",
- "type": "uint16"
+ "internalType": "uint160",
+ "name": "sqrtPriceLimitX96",
+ "type": "uint160"
},
{
- "internalType": "uint16",
- "name": "observationCardinalityNext",
- "type": "uint16"
- },
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "swap",
+ "outputs": [
{
- "internalType": "uint8",
- "name": "feeProtocol",
- "type": "uint8"
+ "internalType": "int256",
+ "name": "amount0",
+ "type": "int256"
},
{
- "internalType": "bool",
- "name": "unlocked",
- "type": "bool"
+ "internalType": "int256",
+ "name": "amount1",
+ "type": "int256"
}
],
- "stateMutability": "view",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "int24",
- "name": "tickLower",
- "type": "int24"
- },
- {
- "internalType": "int24",
- "name": "tickUpper",
+ "name": "",
"type": "int24"
}
],
- "name": "snapshotCumulativesInside",
+ "name": "ticks",
"outputs": [
+ {
+ "internalType": "uint128",
+ "name": "liquidityGross",
+ "type": "uint128"
+ },
+ {
+ "internalType": "int128",
+ "name": "liquidityNet",
+ "type": "int128"
+ },
+ {
+ "internalType": "uint256",
+ "name": "feeGrowthOutside0X128",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "feeGrowthOutside1X128",
+ "type": "uint256"
+ },
{
"internalType": "int56",
- "name": "tickCumulativeInside",
+ "name": "tickCumulativeOutside",
"type": "int56"
},
{
"internalType": "uint160",
- "name": "secondsPerLiquidityInsideX128",
+ "name": "secondsPerLiquidityOutsideX128",
"type": "uint160"
},
{
"internalType": "uint32",
- "name": "secondsInside",
+ "name": "secondsOutside",
"type": "uint32"
+ },
+ {
+ "internalType": "bool",
+ "name": "initialized",
+ "type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [
+ "inputs": [],
+ "name": "token0",
+ "outputs": [
{
"internalType": "address",
- "name": "recipient",
+ "name": "",
"type": "address"
- },
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "token1",
+ "outputs": [
{
- "internalType": "bool",
- "name": "zeroForOne",
- "type": "bool"
- },
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "_disabled": [
+ {
+ "inputs": [
{
- "internalType": "int256",
- "name": "amountSpecified",
- "type": "int256"
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
},
{
- "internalType": "uint160",
- "name": "sqrtPriceLimitX96",
- "type": "uint160"
+ "internalType": "uint128",
+ "name": "amount0Requested",
+ "type": "uint128"
},
{
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
+ "internalType": "uint128",
+ "name": "amount1Requested",
+ "type": "uint128"
}
],
- "name": "swap",
+ "name": "collectProtocol",
"outputs": [
{
- "internalType": "int256",
+ "internalType": "uint128",
"name": "amount0",
- "type": "int256"
+ "type": "uint128"
},
{
- "internalType": "int256",
+ "internalType": "uint128",
"name": "amount1",
- "type": "int256"
+ "type": "uint128"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
- "inputs": [
+ "inputs": [],
+ "name": "feeGrowthGlobal0X128",
+ "outputs": [
{
- "internalType": "int16",
+ "internalType": "uint256",
"name": "",
- "type": "int16"
+ "type": "uint256"
}
],
- "name": "tickBitmap",
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "feeGrowthGlobal1X128",
"outputs": [
{
"internalType": "uint256",
@@ -893,14 +835,27 @@
"stateMutability": "view",
"type": "function"
},
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "observationCardinalityNext",
+ "type": "uint16"
+ }
+ ],
+ "name": "increaseObservationCardinalityNext",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
{
"inputs": [],
- "name": "tickSpacing",
+ "name": "maxLiquidityPerTick",
"outputs": [
{
- "internalType": "int24",
+ "internalType": "uint128",
"name": "",
- "type": "int24"
+ "type": "uint128"
}
],
"stateMutability": "view",
@@ -909,65 +864,112 @@
{
"inputs": [
{
- "internalType": "int24",
- "name": "",
- "type": "int24"
+ "internalType": "uint8",
+ "name": "feeProtocol0",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "feeProtocol1",
+ "type": "uint8"
}
],
- "name": "ticks",
+ "name": "setFeeProtocol",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "slot0",
"outputs": [
{
- "internalType": "uint128",
- "name": "liquidityGross",
- "type": "uint128"
+ "internalType": "uint160",
+ "name": "sqrtPriceX96",
+ "type": "uint160"
},
{
- "internalType": "int128",
- "name": "liquidityNet",
- "type": "int128"
+ "internalType": "int24",
+ "name": "tick",
+ "type": "int24"
},
{
- "internalType": "uint256",
- "name": "feeGrowthOutside0X128",
- "type": "uint256"
+ "internalType": "uint16",
+ "name": "observationIndex",
+ "type": "uint16"
},
{
- "internalType": "uint256",
- "name": "feeGrowthOutside1X128",
- "type": "uint256"
+ "internalType": "uint16",
+ "name": "observationCardinality",
+ "type": "uint16"
},
+ {
+ "internalType": "uint16",
+ "name": "observationCardinalityNext",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint8",
+ "name": "feeProtocol",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "unlocked",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "int24",
+ "name": "tickLower",
+ "type": "int24"
+ },
+ {
+ "internalType": "int24",
+ "name": "tickUpper",
+ "type": "int24"
+ }
+ ],
+ "name": "snapshotCumulativesInside",
+ "outputs": [
{
"internalType": "int56",
- "name": "tickCumulativeOutside",
+ "name": "tickCumulativeInside",
"type": "int56"
},
{
"internalType": "uint160",
- "name": "secondsPerLiquidityOutsideX128",
+ "name": "secondsPerLiquidityInsideX128",
"type": "uint160"
},
{
"internalType": "uint32",
- "name": "secondsOutside",
+ "name": "secondsInside",
"type": "uint32"
- },
- {
- "internalType": "bool",
- "name": "initialized",
- "type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
- "inputs": [],
- "name": "token0",
+ "inputs": [
+ {
+ "internalType": "int16",
+ "name": "",
+ "type": "int16"
+ }
+ ],
+ "name": "tickBitmap",
"outputs": [
{
- "internalType": "address",
+ "internalType": "uint256",
"name": "",
- "type": "address"
+ "type": "uint256"
}
],
"stateMutability": "view",
@@ -975,12 +977,12 @@
},
{
"inputs": [],
- "name": "token1",
+ "name": "tickSpacing",
"outputs": [
{
- "internalType": "address",
+ "internalType": "int24",
"name": "",
- "type": "address"
+ "type": "int24"
}
],
"stateMutability": "view",
diff --git a/crates/contracts/artifacts/UniswapV3QuoterV2.json b/contracts/artifacts/UniswapV3QuoterV2.json
similarity index 99%
rename from crates/contracts/artifacts/UniswapV3QuoterV2.json
rename to contracts/artifacts/UniswapV3QuoterV2.json
index 7d72b79934..ffb210fdc1 100644
--- a/crates/contracts/artifacts/UniswapV3QuoterV2.json
+++ b/contracts/artifacts/UniswapV3QuoterV2.json
@@ -241,7 +241,9 @@
],
"stateMutability": "nonpayable",
"type": "function"
- },
+ }
+ ],
+ "_disabled": [
{
"inputs": [
{
diff --git a/crates/contracts/artifacts/UniswapV3SwapRouterV2.json b/contracts/artifacts/UniswapV3SwapRouterV2.json
similarity index 100%
rename from crates/contracts/artifacts/UniswapV3SwapRouterV2.json
rename to contracts/artifacts/UniswapV3SwapRouterV2.json
diff --git a/crates/contracts/artifacts/WETH9.json b/contracts/artifacts/WETH9.json
similarity index 99%
rename from crates/contracts/artifacts/WETH9.json
rename to contracts/artifacts/WETH9.json
index a1717577d9..9abe58a0af 100644
--- a/crates/contracts/artifacts/WETH9.json
+++ b/contracts/artifacts/WETH9.json
@@ -1,89 +1,5 @@
{
"abi": [
- {
- "constant": true,
- "inputs": [],
- "name": "name",
- "outputs": [
- {
- "name": "",
- "type": "string"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "decimals",
- "outputs": [
- {
- "name": "",
- "type": "uint8"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "address"
- }
- ],
- "name": "balanceOf",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "symbol",
- "outputs": [
- {
- "name": "",
- "type": "string"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "",
- "type": "address"
- },
- {
- "name": "",
- "type": "address"
- }
- ],
- "name": "allowance",
- "outputs": [
- {
- "name": "",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
{
"payable": true,
"stateMutability": "payable",
@@ -168,32 +84,79 @@
"type": "event"
},
{
- "constant": false,
+ "constant": true,
"inputs": [],
- "name": "deposit",
- "outputs": [],
- "payable": true,
- "stateMutability": "payable",
+ "name": "name",
+ "outputs": [
+ {
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
"type": "function"
},
{
- "constant": false,
+ "constant": true,
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "constant": true,
"inputs": [
{
- "name": "wad",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "name": "",
"type": "uint256"
}
],
- "name": "withdraw",
- "outputs": [],
"payable": false,
- "stateMutability": "nonpayable",
+ "stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
- "name": "totalSupply",
+ "name": "symbol",
+ "outputs": [
+ {
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [
+ {
+ "name": "",
+ "type": "address"
+ },
+ {
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
"outputs": [
{
"name": "",
@@ -204,6 +167,29 @@
"stateMutability": "view",
"type": "function"
},
+ {
+ "constant": false,
+ "inputs": [],
+ "name": "deposit",
+ "outputs": [],
+ "payable": true,
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "name": "wad",
+ "type": "uint256"
+ }
+ ],
+ "name": "withdraw",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
{
"constant": false,
"inputs": [
@@ -284,5 +270,21 @@
},
"userdoc": {
"methods": {}
- }
-}
\ No newline at end of file
+ },
+ "_disabled": [
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ]
+}
diff --git a/crates/contracts/foundry.toml b/contracts/foundry.toml
similarity index 100%
rename from crates/contracts/foundry.toml
rename to contracts/foundry.toml
diff --git a/contracts/generated/.gitignore b/contracts/generated/.gitignore
new file mode 100644
index 0000000000..05923927ff
--- /dev/null
+++ b/contracts/generated/.gitignore
@@ -0,0 +1,2 @@
+/target
+.DS_Store
diff --git a/contracts/generated/Cargo.lock b/contracts/generated/Cargo.lock
new file mode 100644
index 0000000000..100d862231
--- /dev/null
+++ b/contracts/generated/Cargo.lock
@@ -0,0 +1,4531 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
+
+[[package]]
+name = "alloy-chains"
+version = "0.2.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90f374d3c6d729268bbe2d0e0ff992bb97898b2df756691a62ee1d5f0506bc39"
+dependencies = [
+ "alloy-primitives",
+ "num_enum",
+ "strum",
+]
+
+[[package]]
+name = "alloy-consensus"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c0dc44157867da82c469c13186015b86abef209bf0e41625e4b68bac61d728"
+dependencies = [
+ "alloy-eips",
+ "alloy-primitives",
+ "alloy-rlp",
+ "alloy-serde",
+ "alloy-trie",
+ "alloy-tx-macros",
+ "auto_impl",
+ "borsh",
+ "c-kzg",
+ "derive_more",
+ "either",
+ "k256",
+ "once_cell",
+ "rand 0.8.5",
+ "secp256k1",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "thiserror",
+]
+
+[[package]]
+name = "alloy-consensus-any"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba4cdb42df3871cd6b346d6a938ec2ba69a9a0f49d1f82714bc5c48349268434"
+dependencies = [
+ "alloy-consensus",
+ "alloy-eips",
+ "alloy-primitives",
+ "alloy-rlp",
+ "alloy-serde",
+ "serde",
+]
+
+[[package]]
+name = "alloy-contract"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca63b7125a981415898ffe2a2a696c83696c9c6bdb1671c8a912946bbd8e49e7"
+dependencies = [
+ "alloy-consensus",
+ "alloy-dyn-abi",
+ "alloy-json-abi",
+ "alloy-network",
+ "alloy-network-primitives",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-rpc-types-eth",
+ "alloy-sol-types",
+ "alloy-transport",
+ "futures",
+ "futures-util",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "alloy-dyn-abi"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc2db5c583aaef0255aa63a4fe827f826090142528bba48d1bf4119b62780cad"
+dependencies = [
+ "alloy-json-abi",
+ "alloy-primitives",
+ "alloy-sol-type-parser",
+ "alloy-sol-types",
+ "itoa",
+ "serde",
+ "serde_json",
+ "winnow",
+]
+
+[[package]]
+name = "alloy-eip2124"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "741bdd7499908b3aa0b159bba11e71c8cddd009a2c2eb7a06e825f1ec87900a5"
+dependencies = [
+ "alloy-primitives",
+ "alloy-rlp",
+ "crc",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "alloy-eip2930"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9441120fa82df73e8959ae0e4ab8ade03de2aaae61be313fbf5746277847ce25"
+dependencies = [
+ "alloy-primitives",
+ "alloy-rlp",
+ "borsh",
+ "serde",
+]
+
+[[package]]
+name = "alloy-eip7702"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2919c5a56a1007492da313e7a3b6d45ef5edc5d33416fdec63c0d7a2702a0d20"
+dependencies = [
+ "alloy-primitives",
+ "alloy-rlp",
+ "borsh",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "alloy-eip7928"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3231de68d5d6e75332b7489cfcc7f4dfabeba94d990a10e4b923af0e6623540"
+dependencies = [
+ "alloy-primitives",
+ "alloy-rlp",
+ "borsh",
+ "serde",
+]
+
+[[package]]
+name = "alloy-eips"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f7ef09f21bd1e9cb8a686f168cb4a206646804567f0889eadb8dcc4c9288c8"
+dependencies = [
+ "alloy-eip2124",
+ "alloy-eip2930",
+ "alloy-eip7702",
+ "alloy-eip7928",
+ "alloy-primitives",
+ "alloy-rlp",
+ "alloy-serde",
+ "auto_impl",
+ "borsh",
+ "c-kzg",
+ "derive_more",
+ "either",
+ "serde",
+ "serde_with",
+ "sha2",
+ "thiserror",
+]
+
+[[package]]
+name = "alloy-json-abi"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9dbe713da0c737d9e5e387b0ba790eb98b14dd207fe53eef50e19a5a8ec3dac"
+dependencies = [
+ "alloy-primitives",
+ "alloy-sol-type-parser",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "alloy-json-rpc"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff42cd777eea61f370c0b10f2648a1c81e0b783066cd7269228aa993afd487f7"
+dependencies = [
+ "alloy-primitives",
+ "alloy-sol-types",
+ "http",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tracing",
+]
+
+[[package]]
+name = "alloy-network"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cbca04f9b410fdc51aaaf88433cbac761213905a65fe832058bcf6690585762"
+dependencies = [
+ "alloy-consensus",
+ "alloy-consensus-any",
+ "alloy-eips",
+ "alloy-json-rpc",
+ "alloy-network-primitives",
+ "alloy-primitives",
+ "alloy-rpc-types-any",
+ "alloy-rpc-types-eth",
+ "alloy-serde",
+ "alloy-signer",
+ "alloy-sol-types",
+ "async-trait",
+ "auto_impl",
+ "derive_more",
+ "futures-utils-wasm",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "alloy-network-primitives"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42d6d15e069a8b11f56bef2eccbad2a873c6dd4d4c81d04dda29710f5ea52f04"
+dependencies = [
+ "alloy-consensus",
+ "alloy-eips",
+ "alloy-primitives",
+ "alloy-serde",
+ "serde",
+]
+
+[[package]]
+name = "alloy-primitives"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3b431b4e72cd8bd0ec7a50b4be18e73dab74de0dba180eef171055e5d5926e"
+dependencies = [
+ "alloy-rlp",
+ "bytes",
+ "cfg-if",
+ "const-hex",
+ "derive_more",
+ "foldhash 0.2.0",
+ "hashbrown 0.16.1",
+ "indexmap 2.13.0",
+ "itoa",
+ "k256",
+ "keccak-asm",
+ "paste",
+ "proptest",
+ "rand 0.9.2",
+ "rapidhash",
+ "ruint",
+ "rustc-hash",
+ "serde",
+ "sha3",
+]
+
+[[package]]
+name = "alloy-provider"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d181c8cc7cf4805d7e589bf4074d56d55064fa1a979f005a45a62b047616d870"
+dependencies = [
+ "alloy-chains",
+ "alloy-consensus",
+ "alloy-eips",
+ "alloy-json-rpc",
+ "alloy-network",
+ "alloy-network-primitives",
+ "alloy-primitives",
+ "alloy-rpc-client",
+ "alloy-rpc-types-eth",
+ "alloy-signer",
+ "alloy-sol-types",
+ "alloy-transport",
+ "async-stream",
+ "async-trait",
+ "auto_impl",
+ "dashmap",
+ "either",
+ "futures",
+ "futures-utils-wasm",
+ "lru",
+ "parking_lot",
+ "pin-project",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "wasmtimer",
+]
+
+[[package]]
+name = "alloy-rlp"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e93e50f64a77ad9c5470bf2ad0ca02f228da70c792a8f06634801e202579f35e"
+dependencies = [
+ "alloy-rlp-derive",
+ "arrayvec",
+ "bytes",
+]
+
+[[package]]
+name = "alloy-rlp-derive"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce8849c74c9ca0f5a03da1c865e3eb6f768df816e67dd3721a398a8a7e398011"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "alloy-rpc-client"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2792758a93ae32a32e9047c843d536e1448044f78422d71bf7d7c05149e103f"
+dependencies = [
+ "alloy-json-rpc",
+ "alloy-primitives",
+ "alloy-transport",
+ "futures",
+ "pin-project",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tokio-stream",
+ "tower",
+ "tracing",
+ "wasmtimer",
+]
+
+[[package]]
+name = "alloy-rpc-types-any"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd720b63f82b457610f2eaaf1f32edf44efffe03ae25d537632e7d23e7929e1a"
+dependencies = [
+ "alloy-consensus-any",
+ "alloy-rpc-types-eth",
+ "alloy-serde",
+]
+
+[[package]]
+name = "alloy-rpc-types-eth"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2dc411f13092f237d2bf6918caf80977fc2f51485f9b90cb2a2f956912c8c9"
+dependencies = [
+ "alloy-consensus",
+ "alloy-consensus-any",
+ "alloy-eips",
+ "alloy-network-primitives",
+ "alloy-primitives",
+ "alloy-rlp",
+ "alloy-serde",
+ "alloy-sol-types",
+ "itertools 0.14.0",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "thiserror",
+]
+
+[[package]]
+name = "alloy-serde"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2ce1e0dbf7720eee747700e300c99aac01b1a95bb93f493a01e78ee28bb1a37"
+dependencies = [
+ "alloy-primitives",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "alloy-signer"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2425c6f314522c78e8198979c8cbf6769362be4da381d4152ea8eefce383535d"
+dependencies = [
+ "alloy-primitives",
+ "async-trait",
+ "auto_impl",
+ "either",
+ "elliptic-curve",
+ "k256",
+ "thiserror",
+]
+
+[[package]]
+name = "alloy-sol-macro"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab81bab693da9bb79f7a95b64b394718259fdd7e41dceeced4cad57cb71c4f6a"
+dependencies = [
+ "alloy-sol-macro-expander",
+ "alloy-sol-macro-input",
+ "proc-macro-error2",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "alloy-sol-macro-expander"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489f1620bb7e2483fb5819ed01ab6edc1d2f93939dce35a5695085a1afd1d699"
+dependencies = [
+ "alloy-sol-macro-input",
+ "const-hex",
+ "heck",
+ "indexmap 2.13.0",
+ "proc-macro-error2",
+ "proc-macro2",
+ "quote",
+ "sha3",
+ "syn 2.0.117",
+ "syn-solidity",
+]
+
+[[package]]
+name = "alloy-sol-macro-input"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56cef806ad22d4392c5fc83cf8f2089f988eb99c7067b4e0c6f1971fc1cca318"
+dependencies = [
+ "const-hex",
+ "dunce",
+ "heck",
+ "macro-string",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+ "syn-solidity",
+]
+
+[[package]]
+name = "alloy-sol-type-parser"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6df77fea9d6a2a75c0ef8d2acbdfd92286cc599983d3175ccdc170d3433d249"
+dependencies = [
+ "serde",
+ "winnow",
+]
+
+[[package]]
+name = "alloy-sol-types"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64612d29379782a5dde6f4b6570d9c756d734d760c0c94c254d361e678a6591f"
+dependencies = [
+ "alloy-json-abi",
+ "alloy-primitives",
+ "alloy-sol-macro",
+ "serde",
+]
+
+[[package]]
+name = "alloy-transport"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa186e560d523d196580c48bf00f1bf62e63041f28ecf276acc22f8b27bb9f53"
+dependencies = [
+ "alloy-json-rpc",
+ "auto_impl",
+ "base64",
+ "derive_more",
+ "futures",
+ "futures-utils-wasm",
+ "parking_lot",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tower",
+ "tracing",
+ "url",
+ "wasmtimer",
+]
+
+[[package]]
+name = "alloy-trie"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d7fd448ab0a017de542de1dcca7a58e7019fe0e7a34ed3f9543ebddf6aceffa"
+dependencies = [
+ "alloy-primitives",
+ "alloy-rlp",
+ "arrayvec",
+ "derive_more",
+ "nybbles",
+ "serde",
+ "smallvec",
+ "thiserror",
+ "tracing",
+]
+
+[[package]]
+name = "alloy-tx-macros"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fa0c53e8c1e1ef4d01066b01c737fb62fc9397ab52c6e7bb5669f97d281b9bc"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.102"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+
+[[package]]
+name = "ark-ff"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6"
+dependencies = [
+ "ark-ff-asm 0.3.0",
+ "ark-ff-macros 0.3.0",
+ "ark-serialize 0.3.0",
+ "ark-std 0.3.0",
+ "derivative",
+ "num-bigint",
+ "num-traits",
+ "paste",
+ "rustc_version 0.3.3",
+ "zeroize",
+]
+
+[[package]]
+name = "ark-ff"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba"
+dependencies = [
+ "ark-ff-asm 0.4.2",
+ "ark-ff-macros 0.4.2",
+ "ark-serialize 0.4.2",
+ "ark-std 0.4.0",
+ "derivative",
+ "digest 0.10.7",
+ "itertools 0.10.5",
+ "num-bigint",
+ "num-traits",
+ "paste",
+ "rustc_version 0.4.1",
+ "zeroize",
+]
+
+[[package]]
+name = "ark-ff"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70"
+dependencies = [
+ "ark-ff-asm 0.5.0",
+ "ark-ff-macros 0.5.0",
+ "ark-serialize 0.5.0",
+ "ark-std 0.5.0",
+ "arrayvec",
+ "digest 0.10.7",
+ "educe",
+ "itertools 0.13.0",
+ "num-bigint",
+ "num-traits",
+ "paste",
+ "zeroize",
+]
+
+[[package]]
+name = "ark-ff-asm"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ark-ff-asm"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ark-ff-asm"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60"
+dependencies = [
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "ark-ff-macros"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20"
+dependencies = [
+ "num-bigint",
+ "num-traits",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ark-ff-macros"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565"
+dependencies = [
+ "num-bigint",
+ "num-traits",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ark-ff-macros"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3"
+dependencies = [
+ "num-bigint",
+ "num-traits",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "ark-serialize"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671"
+dependencies = [
+ "ark-std 0.3.0",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "ark-serialize"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5"
+dependencies = [
+ "ark-std 0.4.0",
+ "digest 0.10.7",
+ "num-bigint",
+]
+
+[[package]]
+name = "ark-serialize"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7"
+dependencies = [
+ "ark-std 0.5.0",
+ "arrayvec",
+ "digest 0.10.7",
+ "num-bigint",
+]
+
+[[package]]
+name = "ark-std"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c"
+dependencies = [
+ "num-traits",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "ark-std"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185"
+dependencies = [
+ "num-traits",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "ark-std"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a"
+dependencies = [
+ "num-traits",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "arrayvec"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "auto_impl"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
+
+[[package]]
+name = "base16ct"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
+
+[[package]]
+name = "base64"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+
+[[package]]
+name = "base64ct"
+version = "1.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
+
+[[package]]
+name = "bit-set"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
+
+[[package]]
+name = "bitcoin-io"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953"
+
+[[package]]
+name = "bitcoin_hashes"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b"
+dependencies = [
+ "bitcoin-io",
+ "hex-conservative",
+]
+
+[[package]]
+name = "bitflags"
+version = "2.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blst"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45"
+dependencies = [
+ "cc",
+ "glob",
+ "threadpool",
+ "zeroize",
+]
+
+[[package]]
+name = "borsh"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f"
+dependencies = [
+ "borsh-derive",
+ "cfg_aliases",
+]
+
+[[package]]
+name = "borsh-derive"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0686c856aa6aac0c4498f936d7d6a02df690f614c03e4d906d1018062b5c5e2c"
+dependencies = [
+ "once_cell",
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
+
+[[package]]
+name = "byte-slice-cast"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "c-kzg"
+version = "2.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a0f582957c24870b7bfd12bf562c40b4734b533cafbaf8ded31d6d85f462c01"
+dependencies = [
+ "blst",
+ "cc",
+ "glob",
+ "hex",
+ "libc",
+ "once_cell",
+ "serde",
+]
+
+[[package]]
+name = "cc"
+version = "1.2.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2"
+dependencies = [
+ "find-msvc-tools",
+ "shlex",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
+
+[[package]]
+name = "cfg_aliases"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
+
+[[package]]
+name = "chrono"
+version = "0.4.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
+dependencies = [
+ "iana-time-zone",
+ "num-traits",
+ "serde",
+ "windows-link",
+]
+
+[[package]]
+name = "const-hex"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af9a108e542ddf1de36743a6126e94d6659dccda38fc8a77e80b915102ac784a"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "proptest",
+ "serde_core",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
+
+[[package]]
+name = "const_format"
+version = "0.2.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad"
+dependencies = [
+ "const_format_proc_macros",
+]
+
+[[package]]
+name = "const_format_proc_macros"
+version = "0.2.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "contracts"
+version = "0.1.0"
+dependencies = [
+ "cow-contract-anyoneauthenticator",
+ "cow-contract-balancerqueries",
+ "cow-contract-balancerv2authorizer",
+ "cow-contract-balancerv2basepool",
+ "cow-contract-balancerv2basepoolfactory",
+ "cow-contract-balancerv2composablestablepool",
+ "cow-contract-balancerv2composablestablepoolfactory",
+ "cow-contract-balancerv2composablestablepoolfactoryv3",
+ "cow-contract-balancerv2composablestablepoolfactoryv4",
+ "cow-contract-balancerv2composablestablepoolfactoryv5",
+ "cow-contract-balancerv2composablestablepoolfactoryv6",
+ "cow-contract-balancerv2liquiditybootstrappingpool",
+ "cow-contract-balancerv2liquiditybootstrappingpoolfactory",
+ "cow-contract-balancerv2noprotocolfeeliquiditybootstrappingpoolfactory",
+ "cow-contract-balancerv2stablepool",
+ "cow-contract-balancerv2stablepoolfactoryv2",
+ "cow-contract-balancerv2vault",
+ "cow-contract-balancerv2weightedpool",
+ "cow-contract-balancerv2weightedpool2tokensfactory",
+ "cow-contract-balancerv2weightedpoolfactory",
+ "cow-contract-balancerv2weightedpoolfactoryv3",
+ "cow-contract-balancerv2weightedpoolfactoryv4",
+ "cow-contract-balancerv3batchrouter",
+ "cow-contract-balances",
+ "cow-contract-baoswaprouter",
+ "cow-contract-chainalysisoracle",
+ "cow-contract-counter",
+ "cow-contract-cowamm",
+ "cow-contract-cowammconstantproductfactory",
+ "cow-contract-cowammfactorygetter",
+ "cow-contract-cowammlegacyhelper",
+ "cow-contract-cowammuniswapv2priceoracle",
+ "cow-contract-cowprotocoltoken",
+ "cow-contract-cowsettlementforwarder",
+ "cow-contract-cowswapethflow",
+ "cow-contract-cowswaponchainorders",
+ "cow-contract-erc1271signaturevalidator",
+ "cow-contract-erc20",
+ "cow-contract-erc20mintable",
+ "cow-contract-flashloanrouter",
+ "cow-contract-gashog",
+ "cow-contract-gnosissafe",
+ "cow-contract-gnosissafecompatibilityfallbackhandler",
+ "cow-contract-gnosissafeproxy",
+ "cow-contract-gnosissafeproxyfactory",
+ "cow-contract-gpv2allowlistauthentication",
+ "cow-contract-gpv2settlement",
+ "cow-contract-honeyswaprouter",
+ "cow-contract-hookstrampoline",
+ "cow-contract-icowwrapper",
+ "cow-contract-ierc4626",
+ "cow-contract-iswaprpair",
+ "cow-contract-iuniswaplikepair",
+ "cow-contract-iuniswaplikerouter",
+ "cow-contract-iuniswapv3factory",
+ "cow-contract-izeroex",
+ "cow-contract-liquoricesettlement",
+ "cow-contract-mockerc4626wrapper",
+ "cow-contract-nonstandarderc20balances",
+ "cow-contract-pancakerouter",
+ "cow-contract-permit2",
+ "cow-contract-remoteerc20balances",
+ "cow-contract-signatures",
+ "cow-contract-solver",
+ "cow-contract-spardose",
+ "cow-contract-sushiswaprouter",
+ "cow-contract-swapper",
+ "cow-contract-swaprrouter",
+ "cow-contract-testnetuniswapv2router02",
+ "cow-contract-trader",
+ "cow-contract-uniswapv2factory",
+ "cow-contract-uniswapv2router02",
+ "cow-contract-uniswapv3pool",
+ "cow-contract-uniswapv3quoterv2",
+ "cow-contract-uniswapv3swaprouterv2",
+ "cow-contract-weth9",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
+[[package]]
+name = "cow-contract-anyoneauthenticator"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerqueries"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2authorizer"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2basepool"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2basepoolfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2composablestablepool"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2composablestablepoolfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2composablestablepoolfactoryv3"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2composablestablepoolfactoryv4"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2composablestablepoolfactoryv5"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2composablestablepoolfactoryv6"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2liquiditybootstrappingpool"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2liquiditybootstrappingpoolfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2noprotocolfeeliquiditybootstrappingpoolfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2stablepool"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2stablepoolfactoryv2"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2vault"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2weightedpool"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2weightedpool2tokensfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2weightedpoolfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2weightedpoolfactoryv3"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv2weightedpoolfactoryv4"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balancerv3batchrouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-balances"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-baoswaprouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-chainalysisoracle"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-counter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowamm"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowammconstantproductfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowammfactorygetter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowammlegacyhelper"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowammuniswapv2priceoracle"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowprotocoltoken"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowsettlementforwarder"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowswapethflow"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-cowswaponchainorders"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-erc1271signaturevalidator"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-erc20"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-erc20mintable"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-flashloanrouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gashog"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gnosissafe"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gnosissafecompatibilityfallbackhandler"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gnosissafeproxy"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gnosissafeproxyfactory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gpv2allowlistauthentication"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-gpv2settlement"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-honeyswaprouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-hookstrampoline"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-icowwrapper"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-ierc4626"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-iswaprpair"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-iuniswaplikepair"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-iuniswaplikerouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-iuniswapv3factory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-izeroex"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-liquoricesettlement"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-mockerc4626wrapper"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-nonstandarderc20balances"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-pancakerouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-permit2"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-remoteerc20balances"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-signatures"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-solver"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-spardose"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-sushiswaprouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-swapper"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-swaprrouter"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-testnetuniswapv2router02"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-trader"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-uniswapv2factory"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-uniswapv2router02"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-uniswapv3pool"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-uniswapv3quoterv2"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-uniswapv3swaprouterv2"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cow-contract-weth9"
+version = "0.1.0"
+dependencies = [
+ "alloy-contract",
+ "alloy-primitives",
+ "alloy-provider",
+ "alloy-sol-types",
+ "anyhow",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d"
+dependencies = [
+ "crc-catalog",
+]
+
+[[package]]
+name = "crc-catalog"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
+
+[[package]]
+name = "crunchy"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
+
+[[package]]
+name = "crypto-bigint"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
+dependencies = [
+ "generic-array",
+ "rand_core 0.6.4",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "darling"
+version = "0.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "strsim",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "dashmap"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+ "hashbrown 0.14.5",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "der"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
+dependencies = [
+ "const-oid",
+ "zeroize",
+]
+
+[[package]]
+name = "deranged"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
+dependencies = [
+ "powerfmt",
+ "serde_core",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_more"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134"
+dependencies = [
+ "derive_more-impl",
+]
+
+[[package]]
+name = "derive_more-impl"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version 0.4.1",
+ "syn 2.0.117",
+ "unicode-xid",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "const-oid",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
+
+[[package]]
+name = "ecdsa"
+version = "0.16.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
+dependencies = [
+ "der",
+ "digest 0.10.7",
+ "elliptic-curve",
+ "rfc6979",
+ "serdect",
+ "signature",
+ "spki",
+]
+
+[[package]]
+name = "educe"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417"
+dependencies = [
+ "enum-ordinalize",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "either"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "elliptic-curve"
+version = "0.13.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
+dependencies = [
+ "base16ct",
+ "crypto-bigint",
+ "digest 0.10.7",
+ "ff",
+ "generic-array",
+ "group",
+ "pkcs8",
+ "rand_core 0.6.4",
+ "sec1",
+ "serdect",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "enum-ordinalize"
+version = "4.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0"
+dependencies = [
+ "enum-ordinalize-derive",
+]
+
+[[package]]
+name = "enum-ordinalize-derive"
+version = "4.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+
+[[package]]
+name = "errno"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
+
+[[package]]
+name = "fastrlp"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418"
+dependencies = [
+ "arrayvec",
+ "auto_impl",
+ "bytes",
+]
+
+[[package]]
+name = "fastrlp"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4"
+dependencies = [
+ "arrayvec",
+ "auto_impl",
+ "bytes",
+]
+
+[[package]]
+name = "ff"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393"
+dependencies = [
+ "rand_core 0.6.4",
+ "subtle",
+]
+
+[[package]]
+name = "find-msvc-tools"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
+
+[[package]]
+name = "fixed-hash"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534"
+dependencies = [
+ "byteorder",
+ "rand 0.8.5",
+ "rustc-hex",
+ "static_assertions",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foldhash"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
+
+[[package]]
+name = "foldhash"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
+
+[[package]]
+name = "futures-task"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
+
+[[package]]
+name = "futures-util"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "slab",
+]
+
+[[package]]
+name = "futures-utils-wasm"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9"
+
+[[package]]
+name = "generic-array"
+version = "0.14.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
+dependencies = [
+ "typenum",
+ "version_check",
+ "zeroize",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "r-efi",
+ "wasip2",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "r-efi",
+ "wasip2",
+ "wasip3",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
+
+[[package]]
+name = "group"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
+dependencies = [
+ "ff",
+ "rand_core 0.6.4",
+ "subtle",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+
+[[package]]
+name = "hashbrown"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
+dependencies = [
+ "foldhash 0.1.5",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
+dependencies = [
+ "allocator-api2",
+ "equivalent",
+ "foldhash 0.2.0",
+ "serde",
+ "serde_core",
+]
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "hermit-abi"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hex-conservative"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda06d18ac606267c40c04e41b9947729bf8b9efe74bd4e82b61a5f26a510b9f"
+dependencies = [
+ "arrayvec",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "http"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
+dependencies = [
+ "bytes",
+ "itoa",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "log",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "icu_collections"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
+dependencies = [
+ "displaydoc",
+ "potential_utf",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locale_core"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
+dependencies = [
+ "displaydoc",
+ "litemap",
+ "tinystr",
+ "writeable",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
+dependencies = [
+ "icu_collections",
+ "icu_normalizer_data",
+ "icu_properties",
+ "icu_provider",
+ "smallvec",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer_data"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
+
+[[package]]
+name = "icu_properties"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec"
+dependencies = [
+ "icu_collections",
+ "icu_locale_core",
+ "icu_properties_data",
+ "icu_provider",
+ "zerotrie",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_properties_data"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af"
+
+[[package]]
+name = "icu_provider"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
+dependencies = [
+ "displaydoc",
+ "icu_locale_core",
+ "writeable",
+ "yoke",
+ "zerofrom",
+ "zerotrie",
+ "zerovec",
+]
+
+[[package]]
+name = "id-arena"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
+dependencies = [
+ "idna_adapter",
+ "smallvec",
+ "utf8_iter",
+]
+
+[[package]]
+name = "idna_adapter"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
+dependencies = [
+ "icu_normalizer",
+ "icu_properties",
+]
+
+[[package]]
+name = "impl-codec"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f"
+dependencies = [
+ "parity-scale-codec",
+]
+
+[[package]]
+name = "impl-trait-for-tuples"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.16.1",
+ "serde",
+ "serde_core",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
+
+[[package]]
+name = "js-sys"
+version = "0.3.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dc6f6450b3f6d4ed5b16327f38fed626d375a886159ca555bd7822c0c3a5a6"
+dependencies = [
+ "once_cell",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "k256"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b"
+dependencies = [
+ "cfg-if",
+ "ecdsa",
+ "elliptic-curve",
+ "once_cell",
+ "serdect",
+ "sha2",
+]
+
+[[package]]
+name = "keccak"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653"
+dependencies = [
+ "cpufeatures",
+]
+
+[[package]]
+name = "keccak-asm"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b646a74e746cd25045aa0fd42f4f7f78aa6d119380182c7e63a5593c4ab8df6f"
+dependencies = [
+ "digest 0.10.7",
+ "sha3-asm",
+]
+
+[[package]]
+name = "leb128fmt"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
+
+[[package]]
+name = "libc"
+version = "0.2.182"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112"
+
+[[package]]
+name = "libm"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
+
+[[package]]
+name = "litemap"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
+
+[[package]]
+name = "lock_api"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+
+[[package]]
+name = "lru"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593"
+dependencies = [
+ "hashbrown 0.16.1",
+]
+
+[[package]]
+name = "macro-string"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "memchr"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
+
+[[package]]
+name = "num-bigint"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
+dependencies = [
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-conv"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050"
+
+[[package]]
+name = "num-integer"
+version = "0.1.46"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+ "libm",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c"
+dependencies = [
+ "num_enum_derive",
+ "rustversion",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "nybbles"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d49ff0c0d00d4a502b39df9af3a525e1efeb14b9dabb5bb83335284c1309210"
+dependencies = [
+ "alloy-rlp",
+ "cfg-if",
+ "proptest",
+ "ruint",
+ "serde",
+ "smallvec",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+
+[[package]]
+name = "parity-scale-codec"
+version = "3.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa"
+dependencies = [
+ "arrayvec",
+ "bitvec",
+ "byte-slice-cast",
+ "const_format",
+ "impl-trait-for-tuples",
+ "parity-scale-codec-derive",
+ "rustversion",
+ "serde",
+]
+
+[[package]]
+name = "parity-scale-codec-derive"
+version = "3.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-link",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
+
+[[package]]
+name = "pest"
+version = "2.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662"
+dependencies = [
+ "memchr",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkcs8"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+dependencies = [
+ "der",
+ "spki",
+]
+
+[[package]]
+name = "potential_utf"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
+dependencies = [
+ "zerovec",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+dependencies = [
+ "zerocopy",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.2.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
+dependencies = [
+ "proc-macro2",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "primitive-types"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2"
+dependencies = [
+ "fixed-hash",
+ "impl-codec",
+ "uint",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983"
+dependencies = [
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro-error-attr2"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "proc-macro-error2"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802"
+dependencies = [
+ "proc-macro-error-attr2",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.106"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proptest"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37566cb3fdacef14c0737f9546df7cfeadbfbc9fef10991038bf5015d0c80532"
+dependencies = [
+ "bit-set",
+ "bit-vec",
+ "bitflags",
+ "num-traits",
+ "rand 0.9.2",
+ "rand_chacha 0.9.0",
+ "rand_xorshift",
+ "regex-syntax",
+ "rusty-fork",
+ "tempfile",
+ "unarray",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "r-efi"
+version = "5.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+ "serde",
+]
+
+[[package]]
+name = "rand"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
+dependencies = [
+ "rand_chacha 0.9.0",
+ "rand_core 0.9.5",
+ "serde",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.9.5",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.17",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
+dependencies = [
+ "getrandom 0.3.4",
+ "serde",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a"
+dependencies = [
+ "rand_core 0.9.5",
+]
+
+[[package]]
+name = "rapidhash"
+version = "4.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e48930979c155e2f33aa36ab3119b5ee81332beb6482199a8ecd6029b80b59"
+dependencies = [
+ "rustversion",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.5.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
+
+[[package]]
+name = "rfc6979"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
+dependencies = [
+ "hmac",
+ "subtle",
+]
+
+[[package]]
+name = "rlp"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec"
+dependencies = [
+ "bytes",
+ "rustc-hex",
+]
+
+[[package]]
+name = "ruint"
+version = "1.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c141e807189ad38a07276942c6623032d3753c8859c146104ac2e4d68865945a"
+dependencies = [
+ "alloy-rlp",
+ "ark-ff 0.3.0",
+ "ark-ff 0.4.2",
+ "ark-ff 0.5.0",
+ "bytes",
+ "fastrlp 0.3.1",
+ "fastrlp 0.4.0",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+ "parity-scale-codec",
+ "primitive-types",
+ "proptest",
+ "rand 0.8.5",
+ "rand 0.9.2",
+ "rlp",
+ "ruint-macro",
+ "serde_core",
+ "valuable",
+ "zeroize",
+]
+
+[[package]]
+name = "ruint-macro"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18"
+
+[[package]]
+name = "rustc-hash"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
+
+[[package]]
+name = "rustc-hex"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6"
+
+[[package]]
+name = "rustc_version"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
+dependencies = [
+ "semver 0.11.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
+dependencies = [
+ "semver 1.0.27",
+]
+
+[[package]]
+name = "rustix"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
+dependencies = [
+ "bitflags",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
+
+[[package]]
+name = "rusty-fork"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2"
+dependencies = [
+ "fnv",
+ "quick-error",
+ "tempfile",
+ "wait-timeout",
+]
+
+[[package]]
+name = "schemars"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f"
+dependencies = [
+ "dyn-clone",
+ "ref-cast",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc"
+dependencies = [
+ "dyn-clone",
+ "ref-cast",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sec1"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
+dependencies = [
+ "base16ct",
+ "der",
+ "generic-array",
+ "pkcs8",
+ "serdect",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "secp256k1"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252"
+dependencies = [
+ "bitcoin_hashes",
+ "rand 0.8.5",
+ "secp256k1-sys",
+ "serde",
+]
+
+[[package]]
+name = "secp256k1-sys"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
+
+[[package]]
+name = "semver-parser"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
+dependencies = [
+ "serde_core",
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_core"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.149"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
+dependencies = [
+ "itoa",
+ "memchr",
+ "serde",
+ "serde_core",
+ "zmij",
+]
+
+[[package]]
+name = "serde_with"
+version = "3.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "381b283ce7bc6b476d903296fb59d0d36633652b633b27f64db4fb46dcbfc3b9"
+dependencies = [
+ "base64",
+ "chrono",
+ "hex",
+ "indexmap 1.9.3",
+ "indexmap 2.13.0",
+ "schemars 0.9.0",
+ "schemars 1.2.1",
+ "serde_core",
+ "serde_json",
+ "serde_with_macros",
+ "time",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "3.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6d4e30573c8cb306ed6ab1dca8423eec9a463ea0e155f45399455e0368b27e0"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "serdect"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177"
+dependencies = [
+ "base16ct",
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sha3"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
+dependencies = [
+ "digest 0.10.7",
+ "keccak",
+]
+
+[[package]]
+name = "sha3-asm"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b31139435f327c93c6038ed350ae4588e2c70a13d50599509fee6349967ba35a"
+dependencies = [
+ "cc",
+ "cfg-if",
+]
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "signature"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
+dependencies = [
+ "digest 0.10.7",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
+
+[[package]]
+name = "smallvec"
+version = "1.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "spki"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
+[[package]]
+name = "strum"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "subtle"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn-solidity"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53f425ae0b12e2f5ae65542e00898d500d4d318b4baf09f40fd0d410454e9947"
+dependencies = [
+ "paste",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
+
+[[package]]
+name = "synstructure"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tempfile"
+version = "3.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0"
+dependencies = [
+ "fastrand",
+ "getrandom 0.4.1",
+ "once_cell",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "thiserror"
+version = "2.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "2.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "threadpool"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
+dependencies = [
+ "num_cpus",
+]
+
+[[package]]
+name = "time"
+version = "0.3.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"
+dependencies = [
+ "deranged",
+ "itoa",
+ "num-conv",
+ "powerfmt",
+ "serde_core",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"
+
+[[package]]
+name = "time-macros"
+version = "0.2.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215"
+dependencies = [
+ "num-conv",
+ "time-core",
+]
+
+[[package]]
+name = "tinystr"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
+dependencies = [
+ "displaydoc",
+ "zerovec",
+]
+
+[[package]]
+name = "tokio"
+version = "1.49.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86"
+dependencies = [
+ "pin-project-lite",
+ "tokio-macros",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.7.5+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347"
+dependencies = [
+ "serde_core",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.23.10+spec-1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269"
+dependencies = [
+ "indexmap 2.13.0",
+ "toml_datetime",
+ "toml_parser",
+ "winnow",
+]
+
+[[package]]
+name = "toml_parser"
+version = "1.0.9+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4"
+dependencies = [
+ "winnow",
+]
+
+[[package]]
+name = "tower"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project-lite",
+ "sync_wrapper",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+
+[[package]]
+name = "tower-service"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
+
+[[package]]
+name = "tracing"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
+dependencies = [
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "typenum"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
+
+[[package]]
+name = "uint"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52"
+dependencies = [
+ "byteorder",
+ "crunchy",
+ "hex",
+ "static_assertions",
+]
+
+[[package]]
+name = "unarray"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
+
+[[package]]
+name = "url"
+version = "2.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf8_iter"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+
+[[package]]
+name = "valuable"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
+
+[[package]]
+name = "version_check"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.1+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
+
+[[package]]
+name = "wasip2"
+version = "1.0.2+wasi-0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
+dependencies = [
+ "wit-bindgen",
+]
+
+[[package]]
+name = "wasip3"
+version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
+dependencies = [
+ "wit-bindgen",
+]
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.113"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60722a937f594b7fde9adb894d7c092fc1bb6612897c46368d18e7a20208eff2"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "wasm-bindgen-macro",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.113"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac8c6395094b6b91c4af293f4c79371c163f9a6f56184d2c9a85f5a95f3950"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.113"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab3fabce6159dc20728033842636887e4877688ae94382766e00b180abac9d60"
+dependencies = [
+ "bumpalo",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.113"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de0e091bdb824da87dc01d967388880d017a0a9bc4f3bdc0d86ee9f9336e3bb5"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "wasm-encoder"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
+dependencies = [
+ "leb128fmt",
+ "wasmparser",
+]
+
+[[package]]
+name = "wasm-metadata"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
+dependencies = [
+ "anyhow",
+ "indexmap 2.13.0",
+ "wasm-encoder",
+ "wasmparser",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
+dependencies = [
+ "bitflags",
+ "hashbrown 0.15.5",
+ "indexmap 2.13.0",
+ "semver 1.0.27",
+]
+
+[[package]]
+name = "wasmtimer"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b"
+dependencies = [
+ "futures",
+ "js-sys",
+ "parking_lot",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.62.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-link",
+ "windows-result",
+ "windows-strings",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.60.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.59.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "windows-link"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+
+[[package]]
+name = "windows-result"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.61.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "winnow"
+version = "0.7.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "wit-bindgen"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
+dependencies = [
+ "wit-bindgen-rust-macro",
+]
+
+[[package]]
+name = "wit-bindgen-core"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
+dependencies = [
+ "anyhow",
+ "heck",
+ "wit-parser",
+]
+
+[[package]]
+name = "wit-bindgen-rust"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
+dependencies = [
+ "anyhow",
+ "heck",
+ "indexmap 2.13.0",
+ "prettyplease",
+ "syn 2.0.117",
+ "wasm-metadata",
+ "wit-bindgen-core",
+ "wit-component",
+]
+
+[[package]]
+name = "wit-bindgen-rust-macro"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
+dependencies = [
+ "anyhow",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+ "wit-bindgen-core",
+ "wit-bindgen-rust",
+]
+
+[[package]]
+name = "wit-component"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
+dependencies = [
+ "anyhow",
+ "bitflags",
+ "indexmap 2.13.0",
+ "log",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "wasm-encoder",
+ "wasm-metadata",
+ "wasmparser",
+ "wit-parser",
+]
+
+[[package]]
+name = "wit-parser"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
+dependencies = [
+ "anyhow",
+ "id-arena",
+ "indexmap 2.13.0",
+ "log",
+ "semver 1.0.27",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "unicode-xid",
+ "wasmparser",
+]
+
+[[package]]
+name = "writeable"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
+
+[[package]]
+name = "yoke"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
+dependencies = [
+ "stable_deref_trait",
+ "yoke-derive",
+ "zerofrom",
+]
+
+[[package]]
+name = "yoke-derive"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+ "synstructure",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a789c6e490b576db9f7e6b6d661bcc9799f7c0ac8352f56ea20193b2681532e5"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f65c489a7071a749c849713807783f70672b28094011623e200cb86dcb835953"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "zerofrom"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
+dependencies = [
+ "zerofrom-derive",
+]
+
+[[package]]
+name = "zerofrom-derive"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+ "synstructure",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
+dependencies = [
+ "zeroize_derive",
+]
+
+[[package]]
+name = "zeroize_derive"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "zerotrie"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
+dependencies = [
+ "displaydoc",
+ "yoke",
+ "zerofrom",
+]
+
+[[package]]
+name = "zerovec"
+version = "0.11.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
+dependencies = [
+ "yoke",
+ "zerofrom",
+ "zerovec-derive",
+]
+
+[[package]]
+name = "zerovec-derive"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "zmij"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
diff --git a/contracts/generated/Cargo.toml b/contracts/generated/Cargo.toml
new file mode 100644
index 0000000000..05040e2ae0
--- /dev/null
+++ b/contracts/generated/Cargo.toml
@@ -0,0 +1,17 @@
+# Auto-generated by contracts-generate. Do not edit.
+[workspace]
+resolver = "3"
+members = [
+ "contracts-facade",
+ "contracts-generated/*",
+]
+
+[workspace.dependencies]
+alloy-contract = { version = "1.7.3" }
+alloy-primitives = { version = "1.5.7", default-features = false }
+alloy-provider = { version = "1.7.3", default-features = false }
+alloy-sol-types = { version = "1.5.7", default-features = false }
+anyhow = "1.0.100"
+
+[workspace.lints.clippy]
+all = "warn"
diff --git a/contracts/generated/contracts-facade/Cargo.toml b/contracts/generated/contracts-facade/Cargo.toml
new file mode 100644
index 0000000000..902099c993
--- /dev/null
+++ b/contracts/generated/contracts-facade/Cargo.toml
@@ -0,0 +1,90 @@
+# Auto-generated by contracts-generate. Do not edit.
+[package]
+name = "contracts"
+version = "0.1.0"
+edition = "2024"
+publish = false
+
+[lib]
+doctest = false
+
+[dependencies]
+cow-contract-anyoneauthenticator = { path = "../contracts-generated/anyoneauthenticator" }
+cow-contract-balancerqueries = { path = "../contracts-generated/balancerqueries" }
+cow-contract-balancerv2authorizer = { path = "../contracts-generated/balancerv2authorizer" }
+cow-contract-balancerv2basepool = { path = "../contracts-generated/balancerv2basepool" }
+cow-contract-balancerv2basepoolfactory = { path = "../contracts-generated/balancerv2basepoolfactory" }
+cow-contract-balancerv2composablestablepool = { path = "../contracts-generated/balancerv2composablestablepool" }
+cow-contract-balancerv2composablestablepoolfactory = { path = "../contracts-generated/balancerv2composablestablepoolfactory" }
+cow-contract-balancerv2composablestablepoolfactoryv3 = { path = "../contracts-generated/balancerv2composablestablepoolfactoryv3" }
+cow-contract-balancerv2composablestablepoolfactoryv4 = { path = "../contracts-generated/balancerv2composablestablepoolfactoryv4" }
+cow-contract-balancerv2composablestablepoolfactoryv5 = { path = "../contracts-generated/balancerv2composablestablepoolfactoryv5" }
+cow-contract-balancerv2composablestablepoolfactoryv6 = { path = "../contracts-generated/balancerv2composablestablepoolfactoryv6" }
+cow-contract-balancerv2liquiditybootstrappingpool = { path = "../contracts-generated/balancerv2liquiditybootstrappingpool" }
+cow-contract-balancerv2liquiditybootstrappingpoolfactory = { path = "../contracts-generated/balancerv2liquiditybootstrappingpoolfactory" }
+cow-contract-balancerv2noprotocolfeeliquiditybootstrappingpoolfactory = { path = "../contracts-generated/balancerv2noprotocolfeeliquiditybootstrappingpoolfactory" }
+cow-contract-balancerv2stablepool = { path = "../contracts-generated/balancerv2stablepool" }
+cow-contract-balancerv2stablepoolfactoryv2 = { path = "../contracts-generated/balancerv2stablepoolfactoryv2" }
+cow-contract-balancerv2vault = { path = "../contracts-generated/balancerv2vault" }
+cow-contract-balancerv2weightedpool = { path = "../contracts-generated/balancerv2weightedpool" }
+cow-contract-balancerv2weightedpool2tokensfactory = { path = "../contracts-generated/balancerv2weightedpool2tokensfactory" }
+cow-contract-balancerv2weightedpoolfactory = { path = "../contracts-generated/balancerv2weightedpoolfactory" }
+cow-contract-balancerv2weightedpoolfactoryv3 = { path = "../contracts-generated/balancerv2weightedpoolfactoryv3" }
+cow-contract-balancerv2weightedpoolfactoryv4 = { path = "../contracts-generated/balancerv2weightedpoolfactoryv4" }
+cow-contract-balancerv3batchrouter = { path = "../contracts-generated/balancerv3batchrouter" }
+cow-contract-balances = { path = "../contracts-generated/balances" }
+cow-contract-baoswaprouter = { path = "../contracts-generated/baoswaprouter" }
+cow-contract-chainalysisoracle = { path = "../contracts-generated/chainalysisoracle" }
+cow-contract-counter = { path = "../contracts-generated/counter" }
+cow-contract-cowamm = { path = "../contracts-generated/cowamm" }
+cow-contract-cowammconstantproductfactory = { path = "../contracts-generated/cowammconstantproductfactory" }
+cow-contract-cowammfactorygetter = { path = "../contracts-generated/cowammfactorygetter" }
+cow-contract-cowammlegacyhelper = { path = "../contracts-generated/cowammlegacyhelper" }
+cow-contract-cowammuniswapv2priceoracle = { path = "../contracts-generated/cowammuniswapv2priceoracle" }
+cow-contract-cowprotocoltoken = { path = "../contracts-generated/cowprotocoltoken" }
+cow-contract-cowsettlementforwarder = { path = "../contracts-generated/cowsettlementforwarder" }
+cow-contract-cowswapethflow = { path = "../contracts-generated/cowswapethflow" }
+cow-contract-cowswaponchainorders = { path = "../contracts-generated/cowswaponchainorders" }
+cow-contract-erc20 = { path = "../contracts-generated/erc20" }
+cow-contract-erc20mintable = { path = "../contracts-generated/erc20mintable" }
+cow-contract-erc1271signaturevalidator = { path = "../contracts-generated/erc1271signaturevalidator" }
+cow-contract-flashloanrouter = { path = "../contracts-generated/flashloanrouter" }
+cow-contract-gashog = { path = "../contracts-generated/gashog" }
+cow-contract-gnosissafe = { path = "../contracts-generated/gnosissafe" }
+cow-contract-gnosissafecompatibilityfallbackhandler = { path = "../contracts-generated/gnosissafecompatibilityfallbackhandler" }
+cow-contract-gnosissafeproxy = { path = "../contracts-generated/gnosissafeproxy" }
+cow-contract-gnosissafeproxyfactory = { path = "../contracts-generated/gnosissafeproxyfactory" }
+cow-contract-gpv2allowlistauthentication = { path = "../contracts-generated/gpv2allowlistauthentication" }
+cow-contract-gpv2settlement = { path = "../contracts-generated/gpv2settlement" }
+cow-contract-honeyswaprouter = { path = "../contracts-generated/honeyswaprouter" }
+cow-contract-hookstrampoline = { path = "../contracts-generated/hookstrampoline" }
+cow-contract-icowwrapper = { path = "../contracts-generated/icowwrapper" }
+cow-contract-ierc4626 = { path = "../contracts-generated/ierc4626" }
+cow-contract-iswaprpair = { path = "../contracts-generated/iswaprpair" }
+cow-contract-iuniswaplikepair = { path = "../contracts-generated/iuniswaplikepair" }
+cow-contract-iuniswaplikerouter = { path = "../contracts-generated/iuniswaplikerouter" }
+cow-contract-iuniswapv3factory = { path = "../contracts-generated/iuniswapv3factory" }
+cow-contract-izeroex = { path = "../contracts-generated/izeroex" }
+cow-contract-liquoricesettlement = { path = "../contracts-generated/liquoricesettlement" }
+cow-contract-mockerc4626wrapper = { path = "../contracts-generated/mockerc4626wrapper" }
+cow-contract-nonstandarderc20balances = { path = "../contracts-generated/nonstandarderc20balances" }
+cow-contract-pancakerouter = { path = "../contracts-generated/pancakerouter" }
+cow-contract-permit2 = { path = "../contracts-generated/permit2" }
+cow-contract-remoteerc20balances = { path = "../contracts-generated/remoteerc20balances" }
+cow-contract-signatures = { path = "../contracts-generated/signatures" }
+cow-contract-solver = { path = "../contracts-generated/solver" }
+cow-contract-spardose = { path = "../contracts-generated/spardose" }
+cow-contract-sushiswaprouter = { path = "../contracts-generated/sushiswaprouter" }
+cow-contract-swapper = { path = "../contracts-generated/swapper" }
+cow-contract-swaprrouter = { path = "../contracts-generated/swaprrouter" }
+cow-contract-testnetuniswapv2router02 = { path = "../contracts-generated/testnetuniswapv2router02" }
+cow-contract-trader = { path = "../contracts-generated/trader" }
+cow-contract-uniswapv2factory = { path = "../contracts-generated/uniswapv2factory" }
+cow-contract-uniswapv2router02 = { path = "../contracts-generated/uniswapv2router02" }
+cow-contract-uniswapv3pool = { path = "../contracts-generated/uniswapv3pool" }
+cow-contract-uniswapv3quoterv2 = { path = "../contracts-generated/uniswapv3quoterv2" }
+cow-contract-uniswapv3swaprouterv2 = { path = "../contracts-generated/uniswapv3swaprouterv2" }
+cow-contract-weth9 = { path = "../contracts-generated/weth9" }
+
+[lints]
+workspace = true
diff --git a/contracts/generated/contracts-facade/src/lib.rs b/contracts/generated/contracts-facade/src/lib.rs
new file mode 100644
index 0000000000..331b6a21aa
--- /dev/null
+++ b/contracts/generated/contracts-facade/src/lib.rs
@@ -0,0 +1,99 @@
+#![allow(
+ unused_imports,
+ unused_attributes,
+ clippy::all,
+ rustdoc::all,
+ non_snake_case
+)]
+//! This crate re-exports per-contract crate bindings.
+//! Auto-generated by contracts-generate. Do not edit.
+pub use {
+ cow_contract_balancerqueries as BalancerQueries,
+ cow_contract_balancerv2authorizer as BalancerV2Authorizer,
+ cow_contract_balancerv2basepool as BalancerV2BasePool,
+ cow_contract_balancerv2basepoolfactory as BalancerV2BasePoolFactory,
+ cow_contract_balancerv2composablestablepool as BalancerV2ComposableStablePool,
+ cow_contract_balancerv2composablestablepoolfactory as BalancerV2ComposableStablePoolFactory,
+ cow_contract_balancerv2composablestablepoolfactoryv3 as BalancerV2ComposableStablePoolFactoryV3,
+ cow_contract_balancerv2composablestablepoolfactoryv4 as BalancerV2ComposableStablePoolFactoryV4,
+ cow_contract_balancerv2composablestablepoolfactoryv5 as BalancerV2ComposableStablePoolFactoryV5,
+ cow_contract_balancerv2composablestablepoolfactoryv6 as BalancerV2ComposableStablePoolFactoryV6,
+ cow_contract_balancerv2liquiditybootstrappingpool as BalancerV2LiquidityBootstrappingPool,
+ cow_contract_balancerv2liquiditybootstrappingpoolfactory as BalancerV2LiquidityBootstrappingPoolFactory,
+ cow_contract_balancerv2noprotocolfeeliquiditybootstrappingpoolfactory as BalancerV2NoProtocolFeeLiquidityBootstrappingPoolFactory,
+ cow_contract_balancerv2stablepool as BalancerV2StablePool,
+ cow_contract_balancerv2stablepoolfactoryv2 as BalancerV2StablePoolFactoryV2,
+ cow_contract_balancerv2vault as BalancerV2Vault,
+ cow_contract_balancerv2weightedpool as BalancerV2WeightedPool,
+ cow_contract_balancerv2weightedpool2tokensfactory as BalancerV2WeightedPool2TokensFactory,
+ cow_contract_balancerv2weightedpoolfactory as BalancerV2WeightedPoolFactory,
+ cow_contract_balancerv2weightedpoolfactoryv3 as BalancerV2WeightedPoolFactoryV3,
+ cow_contract_balancerv2weightedpoolfactoryv4 as BalancerV2WeightedPoolFactoryV4,
+ cow_contract_balancerv3batchrouter as BalancerV3BatchRouter,
+ cow_contract_baoswaprouter as BaoswapRouter,
+ cow_contract_chainalysisoracle as ChainalysisOracle,
+ cow_contract_cowsettlementforwarder as CowSettlementForwarder,
+ cow_contract_cowswapethflow as CoWSwapEthFlow,
+ cow_contract_cowswaponchainorders as CoWSwapOnchainOrders,
+ cow_contract_erc20 as ERC20,
+ cow_contract_erc20mintable as ERC20Mintable,
+ cow_contract_erc1271signaturevalidator as ERC1271SignatureValidator,
+ cow_contract_flashloanrouter as FlashLoanRouter,
+ cow_contract_gnosissafe as GnosisSafe,
+ cow_contract_gnosissafecompatibilityfallbackhandler as GnosisSafeCompatibilityFallbackHandler,
+ cow_contract_gnosissafeproxy as GnosisSafeProxy,
+ cow_contract_gnosissafeproxyfactory as GnosisSafeProxyFactory,
+ cow_contract_gpv2allowlistauthentication as GPv2AllowListAuthentication,
+ cow_contract_gpv2settlement as GPv2Settlement,
+ cow_contract_honeyswaprouter as HoneyswapRouter,
+ cow_contract_hookstrampoline as HooksTrampoline,
+ cow_contract_icowwrapper as ICowWrapper,
+ cow_contract_ierc4626 as IERC4626,
+ cow_contract_iswaprpair as ISwaprPair,
+ cow_contract_iuniswaplikepair as IUniswapLikePair,
+ cow_contract_iuniswaplikerouter as IUniswapLikeRouter,
+ cow_contract_iuniswapv3factory as IUniswapV3Factory,
+ cow_contract_izeroex as IZeroex,
+ cow_contract_liquoricesettlement as LiquoriceSettlement,
+ cow_contract_pancakerouter as PancakeRouter,
+ cow_contract_permit2 as Permit2,
+ cow_contract_sushiswaprouter as SushiSwapRouter,
+ cow_contract_swaprrouter as SwaprRouter,
+ cow_contract_testnetuniswapv2router02 as TestnetUniswapV2Router02,
+ cow_contract_uniswapv2factory as UniswapV2Factory,
+ cow_contract_uniswapv2router02 as UniswapV2Router02,
+ cow_contract_uniswapv3pool as UniswapV3Pool,
+ cow_contract_uniswapv3quoterv2 as UniswapV3QuoterV2,
+ cow_contract_uniswapv3swaprouterv2 as UniswapV3SwapRouterV2,
+ cow_contract_weth9 as WETH9,
+};
+pub mod support {
+ pub use {
+ cow_contract_anyoneauthenticator as AnyoneAuthenticator,
+ cow_contract_balances as Balances,
+ cow_contract_signatures as Signatures,
+ cow_contract_solver as Solver,
+ cow_contract_spardose as Spardose,
+ cow_contract_swapper as Swapper,
+ cow_contract_trader as Trader,
+ };
+}
+pub mod test {
+ pub use {
+ cow_contract_counter as Counter,
+ cow_contract_cowprotocoltoken as CowProtocolToken,
+ cow_contract_gashog as GasHog,
+ cow_contract_mockerc4626wrapper as MockERC4626Wrapper,
+ cow_contract_nonstandarderc20balances as NonStandardERC20Balances,
+ cow_contract_remoteerc20balances as RemoteERC20Balances,
+ };
+}
+pub mod cow_amm {
+ pub use {
+ cow_contract_cowamm as CowAmm,
+ cow_contract_cowammconstantproductfactory as CowAmmConstantProductFactory,
+ cow_contract_cowammfactorygetter as CowAmmFactoryGetter,
+ cow_contract_cowammlegacyhelper as CowAmmLegacyHelper,
+ cow_contract_cowammuniswapv2priceoracle as CowAmmUniswapV2PriceOracle,
+ };
+}
diff --git a/contracts/generated/contracts-generated/anyoneauthenticator/Cargo.toml b/contracts/generated/contracts-generated/anyoneauthenticator/Cargo.toml
new file mode 100644
index 0000000000..e537b8086d
--- /dev/null
+++ b/contracts/generated/contracts-generated/anyoneauthenticator/Cargo.toml
@@ -0,0 +1,19 @@
+# Auto-generated by contracts-generate. Do not edit.
+[package]
+name = "cow-contract-anyoneauthenticator"
+version = "0.1.0"
+edition = "2024"
+publish = false
+
+[lib]
+doctest = false
+
+[dependencies]
+alloy-contract = { workspace = true }
+alloy-primitives = { workspace = true }
+alloy-provider = { workspace = true }
+alloy-sol-types = { workspace = true }
+anyhow = { workspace = true }
+
+[lints]
+workspace = true
diff --git a/contracts/generated/contracts-generated/anyoneauthenticator/src/lib.rs b/contracts/generated/contracts-generated/anyoneauthenticator/src/lib.rs
new file mode 100644
index 0000000000..c4f71c03f3
--- /dev/null
+++ b/contracts/generated/contracts-generated/anyoneauthenticator/src/lib.rs
@@ -0,0 +1,527 @@
+#![allow(
+ unused_imports,
+ unused_attributes,
+ clippy::all,
+ rustdoc::all,
+ non_snake_case
+)]
+//! Auto-generated contract bindings. Do not edit.
+/**
+
+Generated by the following Solidity interface...
+```solidity
+interface AnyoneAuthenticator {
+ function isSolver(address) external pure returns (bool);
+}
+```
+
+...which was generated by the following JSON ABI:
+```json
+[
+ {
+ "type": "function",
+ "name": "isSolver",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "pure"
+ }
+]
+```*/
+#[allow(
+ non_camel_case_types,
+ non_snake_case,
+ clippy::pub_underscore_fields,
+ clippy::style,
+ clippy::empty_structs_with_brackets
+)]
+pub mod AnyoneAuthenticator {
+ use {super::*, alloy_sol_types};
+ /// The creation / init bytecode of the contract.
+ ///
+ /// ```text
+ ///0x6080604052348015600e575f5ffd5b50609480601a5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c806302cc250d14602a575b5f5ffd5b603b6035366004604f565b50600190565b604051901515815260200160405180910390f35b5f60208284031215605e575f5ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681146080575f5ffd5b939250505056fea164736f6c634300081e000a
+ /// ```
+ #[rustfmt::skip]
+ #[allow(clippy::all)]
+ pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
+ b"`\x80`@R4\x80\x15`\x0EW__\xFD[P`\x94\x80`\x1A_9_\xF3\xFE`\x80`@R4\x80\x15`\x0EW__\xFD[P`\x046\x10`&W_5`\xE0\x1C\x80c\x02\xCC%\r\x14`*W[__\xFD[`;`56`\x04`OV[P`\x01\x90V[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[_` \x82\x84\x03\x12\x15`^W__\xFD[\x815s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14`\x80W__\xFD[\x93\x92PPPV\xFE\xA1dsolcC\0\x08\x1E\0\n",
+ );
+ /// The runtime bytecode of the contract, as deployed on the network.
+ ///
+ /// ```text
+ ///0x6080604052348015600e575f5ffd5b50600436106026575f3560e01c806302cc250d14602a575b5f5ffd5b603b6035366004604f565b50600190565b604051901515815260200160405180910390f35b5f60208284031215605e575f5ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681146080575f5ffd5b939250505056fea164736f6c634300081e000a
+ /// ```
+ #[rustfmt::skip]
+ #[allow(clippy::all)]
+ pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
+ b"`\x80`@R4\x80\x15`\x0EW__\xFD[P`\x046\x10`&W_5`\xE0\x1C\x80c\x02\xCC%\r\x14`*W[__\xFD[`;`56`\x04`OV[P`\x01\x90V[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[_` \x82\x84\x03\x12\x15`^W__\xFD[\x815s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14`\x80W__\xFD[\x93\x92PPPV\xFE\xA1dsolcC\0\x08\x1E\0\n",
+ );
+ #[derive(Default, Debug, PartialEq, Eq, Hash)]
+ /**Function with signature `isSolver(address)` and selector `0x02cc250d`.
+ ```solidity
+ function isSolver(address) external pure returns (bool);
+ ```*/
+ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
+ #[derive(Clone)]
+ pub struct isSolverCall(pub alloy_sol_types::private::Address);
+ #[derive(Default, Debug, PartialEq, Eq, Hash)]
+ ///Container type for the return parameters of the
+ /// [`isSolver(address)`](isSolverCall) function.
+ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
+ #[derive(Clone)]
+ pub struct isSolverReturn {
+ #[allow(missing_docs)]
+ pub _0: bool,
+ }
+ #[allow(
+ non_camel_case_types,
+ non_snake_case,
+ clippy::pub_underscore_fields,
+ clippy::style
+ )]
+ const _: () = {
+ use alloy_sol_types;
+ {
+ #[doc(hidden)]
+ #[allow(dead_code)]
+ type UnderlyingSolTuple<'a> = (alloy_sol_types::sol_data::Address,);
+ #[doc(hidden)]
+ type UnderlyingRustTuple<'a> = (alloy_sol_types::private::Address,);
+ #[cfg(test)]
+ #[allow(dead_code, unreachable_patterns)]
+ fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) {
+ match _t {
+ alloy_sol_types::private::AssertTypeEq::<
+ ::RustType,
+ >(_) => {}
+ }
+ }
+ #[automatically_derived]
+ #[doc(hidden)]
+ impl ::core::convert::From for UnderlyingRustTuple<'_> {
+ fn from(value: isSolverCall) -> Self {
+ (value.0,)
+ }
+ }
+ #[automatically_derived]
+ #[doc(hidden)]
+ impl ::core::convert::From> for isSolverCall {
+ fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
+ Self(tuple.0)
+ }
+ }
+ }
+ {
+ #[doc(hidden)]
+ #[allow(dead_code)]
+ type UnderlyingSolTuple<'a> = (alloy_sol_types::sol_data::Bool,);
+ #[doc(hidden)]
+ type UnderlyingRustTuple<'a> = (bool,);
+ #[cfg(test)]
+ #[allow(dead_code, unreachable_patterns)]
+ fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) {
+ match _t {
+ alloy_sol_types::private::AssertTypeEq::<
+ ::RustType,
+ >(_) => {}
+ }
+ }
+ #[automatically_derived]
+ #[doc(hidden)]
+ impl ::core::convert::From for UnderlyingRustTuple<'_> {
+ fn from(value: isSolverReturn) -> Self {
+ (value._0,)
+ }
+ }
+ #[automatically_derived]
+ #[doc(hidden)]
+ impl ::core::convert::From> for isSolverReturn {
+ fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
+ Self { _0: tuple.0 }
+ }
+ }
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::SolCall for isSolverCall {
+ type Parameters<'a> = (alloy_sol_types::sol_data::Address,);
+ type Return = bool;
+ type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>;
+ type ReturnTuple<'a> = (alloy_sol_types::sol_data::Bool,);
+ type Token<'a> = as alloy_sol_types::SolType>::Token<'a>;
+
+ const SELECTOR: [u8; 4] = [2u8, 204u8, 37u8, 13u8];
+ const SIGNATURE: &'static str = "isSolver(address)";
+
+ #[inline]
+ fn new<'a>(
+ tuple: as alloy_sol_types::SolType>::RustType,
+ ) -> Self {
+ tuple.into()
+ }
+
+ #[inline]
+ fn tokenize(&self) -> Self::Token<'_> {
+ (
+ ::tokenize(
+ &self.0,
+ ),
+ )
+ }
+
+ #[inline]
+ fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
+ (::tokenize(ret),)
+ }
+
+ #[inline]
+ fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result {
+ as alloy_sol_types::SolType>::abi_decode_sequence(data).map(
+ |r| {
+ let r: isSolverReturn = r.into();
+ r._0
+ },
+ )
+ }
+
+ #[inline]
+ fn abi_decode_returns_validate(data: &[u8]) -> alloy_sol_types::Result {
+ as alloy_sol_types::SolType>::abi_decode_sequence_validate(
+ data,
+ )
+ .map(|r| {
+ let r: isSolverReturn = r.into();
+ r._0
+ })
+ }
+ }
+ };
+ ///Container for all the [`AnyoneAuthenticator`](self) function calls.
+ #[derive(Clone)]
+ pub enum AnyoneAuthenticatorCalls {
+ #[allow(missing_docs)]
+ isSolver(isSolverCall),
+ }
+ impl AnyoneAuthenticatorCalls {
+ /// All the selectors of this enum.
+ ///
+ /// Note that the selectors might not be in the same order as the
+ /// variants. No guarantees are made about the order of the
+ /// selectors.
+ ///
+ /// Prefer using `SolInterface` methods instead.
+ pub const SELECTORS: &'static [[u8; 4usize]] = &[[2u8, 204u8, 37u8, 13u8]];
+ /// The signatures in the same order as `SELECTORS`.
+ pub const SIGNATURES: &'static [&'static str] =
+ &[::SIGNATURE];
+ /// The names of the variants in the same order as `SELECTORS`.
+ pub const VARIANT_NAMES: &'static [&'static str] = &[::core::stringify!(isSolver)];
+
+ /// Returns the signature for the given selector, if known.
+ #[inline]
+ pub fn signature_by_selector(
+ selector: [u8; 4usize],
+ ) -> ::core::option::Option<&'static str> {
+ match Self::SELECTORS.binary_search(&selector) {
+ ::core::result::Result::Ok(idx) => {
+ ::core::option::Option::Some(Self::SIGNATURES[idx])
+ }
+ ::core::result::Result::Err(_) => ::core::option::Option::None,
+ }
+ }
+
+ /// Returns the enum variant name for the given selector, if known.
+ #[inline]
+ pub fn name_by_selector(selector: [u8; 4usize]) -> ::core::option::Option<&'static str> {
+ let sig = Self::signature_by_selector(selector)?;
+ sig.split_once('(').map(|(name, _)| name)
+ }
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::SolInterface for AnyoneAuthenticatorCalls {
+ const COUNT: usize = 1usize;
+ const MIN_DATA_LENGTH: usize = 32usize;
+ const NAME: &'static str = "AnyoneAuthenticatorCalls";
+
+ #[inline]
+ fn selector(&self) -> [u8; 4] {
+ match self {
+ Self::isSolver(_) => ::SELECTOR,
+ }
+ }
+
+ #[inline]
+ fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
+ Self::SELECTORS.get(i).copied()
+ }
+
+ #[inline]
+ fn valid_selector(selector: [u8; 4]) -> bool {
+ Self::SELECTORS.binary_search(&selector).is_ok()
+ }
+
+ #[inline]
+ #[allow(non_snake_case)]
+ fn abi_decode_raw(selector: [u8; 4], data: &[u8]) -> alloy_sol_types::Result {
+ static DECODE_SHIMS: &[fn(
+ &[u8],
+ )
+ -> alloy_sol_types::Result] = &[{
+ fn isSolver(data: &[u8]) -> alloy_sol_types::Result {
+ ::abi_decode_raw(data)
+ .map(AnyoneAuthenticatorCalls::isSolver)
+ }
+ isSolver
+ }];
+ let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
+ return Err(alloy_sol_types::Error::unknown_selector(
+ ::NAME,
+ selector,
+ ));
+ };
+ DECODE_SHIMS[idx](data)
+ }
+
+ #[inline]
+ #[allow(non_snake_case)]
+ fn abi_decode_raw_validate(
+ selector: [u8; 4],
+ data: &[u8],
+ ) -> alloy_sol_types::Result {
+ static DECODE_VALIDATE_SHIMS: &[fn(
+ &[u8],
+ ) -> alloy_sol_types::Result<
+ AnyoneAuthenticatorCalls,
+ >] = &[{
+ fn isSolver(data: &[u8]) -> alloy_sol_types::Result {
+ ::abi_decode_raw_validate(data)
+ .map(AnyoneAuthenticatorCalls::isSolver)
+ }
+ isSolver
+ }];
+ let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
+ return Err(alloy_sol_types::Error::unknown_selector(
+ ::NAME,
+ selector,
+ ));
+ };
+ DECODE_VALIDATE_SHIMS[idx](data)
+ }
+
+ #[inline]
+ fn abi_encoded_size(&self) -> usize {
+ match self {
+ Self::isSolver(inner) => {
+ ::abi_encoded_size(inner)
+ }
+ }
+ }
+
+ #[inline]
+ fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) {
+ match self {
+ Self::isSolver(inner) => {
+ ::abi_encode_raw(inner, out)
+ }
+ }
+ }
+ }
+ use alloy_contract;
+ /**Creates a new wrapper around an on-chain [`AnyoneAuthenticator`](self) contract instance.
+
+ See the [wrapper's documentation](`AnyoneAuthenticatorInstance`) for more details.*/
+ #[inline]
+ pub const fn new<
+ P: alloy_contract::private::Provider,
+ N: alloy_contract::private::Network,
+ >(
+ address: alloy_sol_types::private::Address,
+ __provider: P,
+ ) -> AnyoneAuthenticatorInstance {
+ AnyoneAuthenticatorInstance::
::new(address, __provider)
+ }
+ /**Deploys this contract using the given `provider` and constructor arguments, if any.
+
+ Returns a new instance of the contract, if the deployment was successful.
+
+ For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
+ #[inline]
+ pub fn deploy, N: alloy_contract::private::Network>(
+ __provider: P,
+ ) -> impl ::core::future::Future>>
+ {
+ AnyoneAuthenticatorInstance::::deploy(__provider)
+ }
+ /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
+ and constructor arguments, if any.
+
+ This is a simple wrapper around creating a `RawCallBuilder` with the data set to
+ the bytecode concatenated with the constructor's ABI-encoded arguments.*/
+ #[inline]
+ pub fn deploy_builder<
+ P: alloy_contract::private::Provider,
+ N: alloy_contract::private::Network,
+ >(
+ __provider: P,
+ ) -> alloy_contract::RawCallBuilder {
+ AnyoneAuthenticatorInstance::
::deploy_builder(__provider)
+ }
+ /**A [`AnyoneAuthenticator`](self) instance.
+
+ Contains type-safe methods for interacting with an on-chain instance of the
+ [`AnyoneAuthenticator`](self) contract located at a given `address`, using a given
+ provider `P`.
+
+ If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
+ documentation on how to provide it), the `deploy` and `deploy_builder` methods can
+ be used to deploy a new instance of the contract.
+
+ See the [module-level documentation](self) for all the available methods.*/
+ #[derive(Clone)]
+ pub struct AnyoneAuthenticatorInstance
{
+ address: alloy_sol_types::private::Address,
+ provider: P,
+ _network: ::core::marker::PhantomData,
+ }
+ #[automatically_derived]
+ impl ::core::fmt::Debug for AnyoneAuthenticatorInstance
{
+ #[inline]
+ fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
+ f.debug_tuple("AnyoneAuthenticatorInstance")
+ .field(&self.address)
+ .finish()
+ }
+ }
+ /// Instantiation and getters/setters.
+ impl, N: alloy_contract::private::Network>
+ AnyoneAuthenticatorInstance
+ {
+ /**Creates a new wrapper around an on-chain [`AnyoneAuthenticator`](self) contract instance.
+
+ See the [wrapper's documentation](`AnyoneAuthenticatorInstance`) for more details.*/
+ #[inline]
+ pub const fn new(address: alloy_sol_types::private::Address, __provider: P) -> Self {
+ Self {
+ address,
+ provider: __provider,
+ _network: ::core::marker::PhantomData,
+ }
+ }
+
+ /**Deploys this contract using the given `provider` and constructor arguments, if any.
+
+ Returns a new instance of the contract, if the deployment was successful.
+
+ For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
+ #[inline]
+ pub async fn deploy(
+ __provider: P,
+ ) -> alloy_contract::Result> {
+ let call_builder = Self::deploy_builder(__provider);
+ let contract_address = call_builder.deploy().await?;
+ Ok(Self::new(contract_address, call_builder.provider))
+ }
+
+ /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
+ and constructor arguments, if any.
+
+ This is a simple wrapper around creating a `RawCallBuilder` with the data set to
+ the bytecode concatenated with the constructor's ABI-encoded arguments.*/
+ #[inline]
+ pub fn deploy_builder(__provider: P) -> alloy_contract::RawCallBuilder {
+ alloy_contract::RawCallBuilder::new_raw_deploy(
+ __provider,
+ ::core::clone::Clone::clone(&BYTECODE),
+ )
+ }
+
+ /// Returns a reference to the address.
+ #[inline]
+ pub const fn address(&self) -> &alloy_sol_types::private::Address {
+ &self.address
+ }
+
+ /// Sets the address.
+ #[inline]
+ pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
+ self.address = address;
+ }
+
+ /// Sets the address and returns `self`.
+ pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
+ self.set_address(address);
+ self
+ }
+
+ /// Returns a reference to the provider.
+ #[inline]
+ pub const fn provider(&self) -> &P {
+ &self.provider
+ }
+ }
+ impl AnyoneAuthenticatorInstance<&P, N> {
+ /// Clones the provider and returns a new instance with the cloned
+ /// provider.
+ #[inline]
+ pub fn with_cloned_provider(self) -> AnyoneAuthenticatorInstance {
+ AnyoneAuthenticatorInstance {
+ address: self.address,
+ provider: ::core::clone::Clone::clone(&self.provider),
+ _network: ::core::marker::PhantomData,
+ }
+ }
+ }
+ /// Function calls.
+ impl, N: alloy_contract::private::Network>
+ AnyoneAuthenticatorInstance
+ {
+ /// Creates a new call builder using this contract instance's provider
+ /// and address.
+ ///
+ /// Note that the call can be any function call, not just those defined
+ /// in this contract. Prefer using the other methods for
+ /// building type-safe contract calls.
+ pub fn call_builder(
+ &self,
+ call: &C,
+ ) -> alloy_contract::SolCallBuilder<&P, C, N> {
+ alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
+ }
+
+ ///Creates a new call builder for the [`isSolver`] function.
+ pub fn isSolver(
+ &self,
+ _0: alloy_sol_types::private::Address,
+ ) -> alloy_contract::SolCallBuilder<&P, isSolverCall, N> {
+ self.call_builder(&isSolverCall(_0))
+ }
+ }
+ /// Event filters.
+ impl, N: alloy_contract::private::Network>
+ AnyoneAuthenticatorInstance
+ {
+ /// Creates a new event filter using this contract instance's provider
+ /// and address.
+ ///
+ /// Note that the type can be any event, not just those defined in this
+ /// contract. Prefer using the other methods for building
+ /// type-safe event filters.
+ pub fn event_filter(
+ &self,
+ ) -> alloy_contract::Event<&P, E, N> {
+ alloy_contract::Event::new_sol(&self.provider, &self.address)
+ }
+ }
+}
+pub type Instance = AnyoneAuthenticator::AnyoneAuthenticatorInstance<::alloy_provider::DynProvider>;
diff --git a/contracts/generated/contracts-generated/balancerqueries/Cargo.toml b/contracts/generated/contracts-generated/balancerqueries/Cargo.toml
new file mode 100644
index 0000000000..c253060b73
--- /dev/null
+++ b/contracts/generated/contracts-generated/balancerqueries/Cargo.toml
@@ -0,0 +1,19 @@
+# Auto-generated by contracts-generate. Do not edit.
+[package]
+name = "cow-contract-balancerqueries"
+version = "0.1.0"
+edition = "2024"
+publish = false
+
+[lib]
+doctest = false
+
+[dependencies]
+alloy-contract = { workspace = true }
+alloy-primitives = { workspace = true }
+alloy-provider = { workspace = true }
+alloy-sol-types = { workspace = true }
+anyhow = { workspace = true }
+
+[lints]
+workspace = true
diff --git a/contracts/generated/contracts-generated/balancerqueries/src/lib.rs b/contracts/generated/contracts-generated/balancerqueries/src/lib.rs
new file mode 100644
index 0000000000..0830247e8e
--- /dev/null
+++ b/contracts/generated/contracts-generated/balancerqueries/src/lib.rs
@@ -0,0 +1,1749 @@
+#![allow(
+ unused_imports,
+ unused_attributes,
+ clippy::all,
+ rustdoc::all,
+ non_snake_case
+)]
+//! Auto-generated contract bindings. Do not edit.
+///Module containing a contract's types and functions.
+/**
+
+```solidity
+library IVault {
+ type SwapKind is uint8;
+ struct BatchSwapStep { bytes32 poolId; uint256 assetInIndex; uint256 assetOutIndex; uint256 amount; bytes userData; }
+ struct FundManagement { address sender; bool fromInternalBalance; address recipient; bool toInternalBalance; }
+}
+```*/
+#[allow(
+ non_camel_case_types,
+ non_snake_case,
+ clippy::pub_underscore_fields,
+ clippy::style,
+ clippy::empty_structs_with_brackets
+)]
+pub mod IVault {
+ use {super::*, alloy_sol_types};
+ #[derive(Default, Debug, PartialEq, Eq, Hash)]
+ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
+ #[derive(Clone)]
+ pub struct SwapKind(u8);
+ const _: () = {
+ use alloy_sol_types;
+ #[automatically_derived]
+ impl alloy_sol_types::private::SolTypeValue for u8 {
+ #[inline]
+ fn stv_to_tokens(
+ &self,
+ ) -> as alloy_sol_types::SolType>::Token<'_>
+ {
+ alloy_sol_types::private::SolTypeValue::<
+ alloy_sol_types::sol_data::Uint<8>,
+ >::stv_to_tokens(self)
+ }
+
+ #[inline]
+ fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
+ as alloy_sol_types::SolType>::tokenize(self).0
+ }
+
+ #[inline]
+ fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) {
+ as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
+ }
+
+ #[inline]
+ fn stv_abi_packed_encoded_size(&self) -> usize {
+ as alloy_sol_types::SolType>::abi_encoded_size(
+ self,
+ )
+ }
+ }
+ impl SwapKind {
+ /// The Solidity type name.
+ pub const NAME: &'static str = stringify!(@ name);
+
+ /// Convert from the underlying value type.
+ #[inline]
+ pub const fn from_underlying(value: u8) -> Self {
+ Self(value)
+ }
+
+ /// Return the underlying value.
+ #[inline]
+ pub const fn into_underlying(self) -> u8 {
+ self.0
+ }
+
+ /// Return the single encoding of this value, delegating to the
+ /// underlying type.
+ #[inline]
+ pub fn abi_encode(&self) -> alloy_sol_types::private::Vec {
+ ::abi_encode(&self.0)
+ }
+
+ /// Return the packed encoding of this value, delegating to the
+ /// underlying type.
+ #[inline]
+ pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec {
+ ::abi_encode_packed(&self.0)
+ }
+ }
+ #[automatically_derived]
+ impl From for SwapKind {
+ fn from(value: u8) -> Self {
+ Self::from_underlying(value)
+ }
+ }
+ #[automatically_derived]
+ impl From for u8 {
+ fn from(value: SwapKind) -> Self {
+ value.into_underlying()
+ }
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::SolType for SwapKind {
+ type RustType = u8;
+ type Token<'a> =
+ as alloy_sol_types::SolType>::Token<'a>;
+
+ const ENCODED_SIZE: Option =
+ as alloy_sol_types::SolType>::ENCODED_SIZE;
+ const PACKED_ENCODED_SIZE: Option = as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
+ const SOL_NAME: &'static str = Self::NAME;
+
+ #[inline]
+ fn valid_token(token: &Self::Token<'_>) -> bool {
+ Self::type_check(token).is_ok()
+ }
+
+ #[inline]
+ fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
+ as alloy_sol_types::SolType>::type_check(token)
+ }
+
+ #[inline]
+ fn detokenize(token: Self::Token<'_>) -> Self::RustType {
+ as alloy_sol_types::SolType>::detokenize(token)
+ }
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::EventTopic for SwapKind {
+ #[inline]
+ fn topic_preimage_length(rust: &Self::RustType) -> usize {
+ as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
+ }
+
+ #[inline]
+ fn encode_topic_preimage(
+ rust: &Self::RustType,
+ out: &mut alloy_sol_types::private::Vec,
+ ) {
+ as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
+ }
+
+ #[inline]
+ fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken {
+ as alloy_sol_types::EventTopic>::encode_topic(
+ rust,
+ )
+ }
+ }
+ };
+ #[derive(Default, Debug, PartialEq, Eq, Hash)]
+ /**```solidity
+ struct BatchSwapStep { bytes32 poolId; uint256 assetInIndex; uint256 assetOutIndex; uint256 amount; bytes userData; }
+ ```*/
+ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
+ #[derive(Clone)]
+ pub struct BatchSwapStep {
+ #[allow(missing_docs)]
+ pub poolId: alloy_sol_types::private::FixedBytes<32>,
+ #[allow(missing_docs)]
+ pub assetInIndex: alloy_sol_types::private::primitives::aliases::U256,
+ #[allow(missing_docs)]
+ pub assetOutIndex: alloy_sol_types::private::primitives::aliases::U256,
+ #[allow(missing_docs)]
+ pub amount: alloy_sol_types::private::primitives::aliases::U256,
+ #[allow(missing_docs)]
+ pub userData: alloy_sol_types::private::Bytes,
+ }
+ #[allow(
+ non_camel_case_types,
+ non_snake_case,
+ clippy::pub_underscore_fields,
+ clippy::style
+ )]
+ const _: () = {
+ use alloy_sol_types;
+ #[doc(hidden)]
+ #[allow(dead_code)]
+ type UnderlyingSolTuple<'a> = (
+ alloy_sol_types::sol_data::FixedBytes<32>,
+ alloy_sol_types::sol_data::Uint<256>,
+ alloy_sol_types::sol_data::Uint<256>,
+ alloy_sol_types::sol_data::Uint<256>,
+ alloy_sol_types::sol_data::Bytes,
+ );
+ #[doc(hidden)]
+ type UnderlyingRustTuple<'a> = (
+ alloy_sol_types::private::FixedBytes<32>,
+ alloy_sol_types::private::primitives::aliases::U256,
+ alloy_sol_types::private::primitives::aliases::U256,
+ alloy_sol_types::private::primitives::aliases::U256,
+ alloy_sol_types::private::Bytes,
+ );
+ #[cfg(test)]
+ #[allow(dead_code, unreachable_patterns)]
+ fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) {
+ match _t {
+ alloy_sol_types::private::AssertTypeEq::<
+ ::RustType,
+ >(_) => {}
+ }
+ }
+ #[automatically_derived]
+ #[doc(hidden)]
+ impl ::core::convert::From for UnderlyingRustTuple<'_> {
+ fn from(value: BatchSwapStep) -> Self {
+ (
+ value.poolId,
+ value.assetInIndex,
+ value.assetOutIndex,
+ value.amount,
+ value.userData,
+ )
+ }
+ }
+ #[automatically_derived]
+ #[doc(hidden)]
+ impl ::core::convert::From> for BatchSwapStep {
+ fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
+ Self {
+ poolId: tuple.0,
+ assetInIndex: tuple.1,
+ assetOutIndex: tuple.2,
+ amount: tuple.3,
+ userData: tuple.4,
+ }
+ }
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::SolValue for BatchSwapStep {
+ type SolType = Self;
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::private::SolTypeValue for BatchSwapStep {
+ #[inline]
+ fn stv_to_tokens(&self) -> ::Token<'_> {
+ (
+ as alloy_sol_types::SolType>::tokenize(&self.poolId),
+ as alloy_sol_types::SolType>::tokenize(&self.assetInIndex),
+ as alloy_sol_types::SolType>::tokenize(&self.assetOutIndex),
+ as alloy_sol_types::SolType>::tokenize(&self.amount),
+ ::tokenize(
+ &self.userData,
+ ),
+ )
+ }
+
+ #[inline]
+ fn stv_abi_encoded_size(&self) -> usize {
+ if let Some(size) = ::ENCODED_SIZE {
+ return size;
+ }
+ let tuple =
+ as ::core::convert::From>::from(self.clone());
+ as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
+ }
+
+ #[inline]
+ fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
+ ::eip712_hash_struct(self)
+ }
+
+ #[inline]
+ fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) {
+ let tuple =
+ as ::core::convert::From>::from(self.clone());
+ as alloy_sol_types::SolType>::abi_encode_packed_to(
+ &tuple, out,
+ )
+ }
+
+ #[inline]
+ fn stv_abi_packed_encoded_size(&self) -> usize {
+ if let Some(size) = ::PACKED_ENCODED_SIZE {
+ return size;
+ }
+ let tuple =
+ as ::core::convert::From>::from(self.clone());
+ as alloy_sol_types::SolType>::abi_packed_encoded_size(
+ &tuple,
+ )
+ }
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::SolType for BatchSwapStep {
+ type RustType = Self;
+ type Token<'a> = as alloy_sol_types::SolType>::Token<'a>;
+
+ const ENCODED_SIZE: Option =
+ as alloy_sol_types::SolType>::ENCODED_SIZE;
+ const PACKED_ENCODED_SIZE: Option =
+ as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
+ const SOL_NAME: &'static str = ::NAME;
+
+ #[inline]
+ fn valid_token(token: &Self::Token<'_>) -> bool {
+ as alloy_sol_types::SolType>::valid_token(token)
+ }
+
+ #[inline]
+ fn detokenize(token: Self::Token<'_>) -> Self::RustType {
+ let tuple = as alloy_sol_types::SolType>::detokenize(token);
+ >>::from(tuple)
+ }
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::SolStruct for BatchSwapStep {
+ const NAME: &'static str = "BatchSwapStep";
+
+ #[inline]
+ fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
+ alloy_sol_types::private::Cow::Borrowed(
+ "BatchSwapStep(bytes32 poolId,uint256 assetInIndex,uint256 \
+ assetOutIndex,uint256 amount,bytes userData)",
+ )
+ }
+
+ #[inline]
+ fn eip712_components()
+ -> alloy_sol_types::private::Vec>
+ {
+ alloy_sol_types::private::Vec::new()
+ }
+
+ #[inline]
+ fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> {
+ ::eip712_root_type()
+ }
+
+ #[inline]
+ fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec {
+ [
+ as alloy_sol_types::SolType>::eip712_data_word(&self.poolId)
+ .0,
+ as alloy_sol_types::SolType>::eip712_data_word(&self.assetInIndex)
+ .0,
+ as alloy_sol_types::SolType>::eip712_data_word(&self.assetOutIndex)
+ .0,
+ as alloy_sol_types::SolType>::eip712_data_word(&self.amount)
+ .0,
+ ::eip712_data_word(
+ &self.userData,
+ )
+ .0,
+ ]
+ .concat()
+ }
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::EventTopic for BatchSwapStep {
+ #[inline]
+ fn topic_preimage_length(rust: &Self::RustType) -> usize {
+ 0usize
+ + as alloy_sol_types::EventTopic>::topic_preimage_length(
+ &rust.poolId,
+ )
+ + as alloy_sol_types::EventTopic>::topic_preimage_length(
+ &rust.assetInIndex,
+ )
+ + as alloy_sol_types::EventTopic>::topic_preimage_length(
+ &rust.assetOutIndex,
+ )
+ + as alloy_sol_types::EventTopic>::topic_preimage_length(
+ &rust.amount,
+ )
+ + ::topic_preimage_length(
+ &rust.userData,
+ )
+ }
+
+ #[inline]
+ fn encode_topic_preimage(
+ rust: &Self::RustType,
+ out: &mut alloy_sol_types::private::Vec,
+ ) {
+ out.reserve(::topic_preimage_length(rust));
+ as alloy_sol_types::EventTopic>::encode_topic_preimage(
+ &rust.poolId,
+ out,
+ );
+ as alloy_sol_types::EventTopic>::encode_topic_preimage(
+ &rust.assetInIndex,
+ out,
+ );
+ as alloy_sol_types::EventTopic>::encode_topic_preimage(
+ &rust.assetOutIndex,
+ out,
+ );
+ as alloy_sol_types::EventTopic>::encode_topic_preimage(
+ &rust.amount,
+ out,
+ );
+ ::encode_topic_preimage(
+ &rust.userData,
+ out,
+ );
+ }
+
+ #[inline]
+ fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken {
+ let mut out = alloy_sol_types::private::Vec::new();
+ ::encode_topic_preimage(rust, &mut out);
+ alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out))
+ }
+ }
+ };
+ #[derive(Default, Debug, PartialEq, Eq, Hash)]
+ /**```solidity
+ struct FundManagement { address sender; bool fromInternalBalance; address recipient; bool toInternalBalance; }
+ ```*/
+ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
+ #[derive(Clone)]
+ pub struct FundManagement {
+ #[allow(missing_docs)]
+ pub sender: alloy_sol_types::private::Address,
+ #[allow(missing_docs)]
+ pub fromInternalBalance: bool,
+ #[allow(missing_docs)]
+ pub recipient: alloy_sol_types::private::Address,
+ #[allow(missing_docs)]
+ pub toInternalBalance: bool,
+ }
+ #[allow(
+ non_camel_case_types,
+ non_snake_case,
+ clippy::pub_underscore_fields,
+ clippy::style
+ )]
+ const _: () = {
+ use alloy_sol_types;
+ #[doc(hidden)]
+ #[allow(dead_code)]
+ type UnderlyingSolTuple<'a> = (
+ alloy_sol_types::sol_data::Address,
+ alloy_sol_types::sol_data::Bool,
+ alloy_sol_types::sol_data::Address,
+ alloy_sol_types::sol_data::Bool,
+ );
+ #[doc(hidden)]
+ type UnderlyingRustTuple<'a> = (
+ alloy_sol_types::private::Address,
+ bool,
+ alloy_sol_types::private::Address,
+ bool,
+ );
+ #[cfg(test)]
+ #[allow(dead_code, unreachable_patterns)]
+ fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) {
+ match _t {
+ alloy_sol_types::private::AssertTypeEq::<
+ ::RustType,
+ >(_) => {}
+ }
+ }
+ #[automatically_derived]
+ #[doc(hidden)]
+ impl ::core::convert::From for UnderlyingRustTuple<'_> {
+ fn from(value: FundManagement) -> Self {
+ (
+ value.sender,
+ value.fromInternalBalance,
+ value.recipient,
+ value.toInternalBalance,
+ )
+ }
+ }
+ #[automatically_derived]
+ #[doc(hidden)]
+ impl ::core::convert::From> for FundManagement {
+ fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
+ Self {
+ sender: tuple.0,
+ fromInternalBalance: tuple.1,
+ recipient: tuple.2,
+ toInternalBalance: tuple.3,
+ }
+ }
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::SolValue for FundManagement {
+ type SolType = Self;
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::private::SolTypeValue for FundManagement {
+ #[inline]
+ fn stv_to_tokens(&self) -> ::Token<'_> {
+ (
+ ::tokenize(
+ &self.sender,
+ ),
+ ::tokenize(
+ &self.fromInternalBalance,
+ ),
+ ::tokenize(
+ &self.recipient,
+ ),
+ ::tokenize(
+ &self.toInternalBalance,
+ ),
+ )
+ }
+
+ #[inline]
+ fn stv_abi_encoded_size(&self) -> usize {
+ if let Some(size) = ::ENCODED_SIZE {
+ return size;
+ }
+ let tuple =
+ as ::core::convert::From>::from(self.clone());
+ as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
+ }
+
+ #[inline]
+ fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
+ ::eip712_hash_struct(self)
+ }
+
+ #[inline]
+ fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec) {
+ let tuple =
+ as ::core::convert::From>::from(self.clone());
+ as alloy_sol_types::SolType>::abi_encode_packed_to(
+ &tuple, out,
+ )
+ }
+
+ #[inline]
+ fn stv_abi_packed_encoded_size(&self) -> usize {
+ if let Some(size) = ::PACKED_ENCODED_SIZE {
+ return size;
+ }
+ let tuple =
+ as ::core::convert::From>::from(self.clone());
+ as alloy_sol_types::SolType>::abi_packed_encoded_size(
+ &tuple,
+ )
+ }
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::SolType for FundManagement {
+ type RustType = Self;
+ type Token<'a> = as alloy_sol_types::SolType>::Token<'a>;
+
+ const ENCODED_SIZE: Option =
+ as alloy_sol_types::SolType>::ENCODED_SIZE;
+ const PACKED_ENCODED_SIZE: Option =
+ as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
+ const SOL_NAME: &'static str = ::NAME;
+
+ #[inline]
+ fn valid_token(token: &Self::Token<'_>) -> bool {
+ as alloy_sol_types::SolType>::valid_token(token)
+ }
+
+ #[inline]
+ fn detokenize(token: Self::Token<'_>) -> Self::RustType {
+ let tuple = as alloy_sol_types::SolType>::detokenize(token);
+ >>::from(tuple)
+ }
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::SolStruct for FundManagement {
+ const NAME: &'static str = "FundManagement";
+
+ #[inline]
+ fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
+ alloy_sol_types::private::Cow::Borrowed(
+ "FundManagement(address sender,bool fromInternalBalance,address \
+ recipient,bool toInternalBalance)",
+ )
+ }
+
+ #[inline]
+ fn eip712_components()
+ -> alloy_sol_types::private::Vec>
+ {
+ alloy_sol_types::private::Vec::new()
+ }
+
+ #[inline]
+ fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> {
+ ::eip712_root_type()
+ }
+
+ #[inline]
+ fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec {
+ [
+ ::eip712_data_word(
+ &self.sender,
+ )
+ .0,
+ ::eip712_data_word(
+ &self.fromInternalBalance,
+ )
+ .0,
+ ::eip712_data_word(
+ &self.recipient,
+ )
+ .0,
+ ::eip712_data_word(
+ &self.toInternalBalance,
+ )
+ .0,
+ ]
+ .concat()
+ }
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::EventTopic for FundManagement {
+ #[inline]
+ fn topic_preimage_length(rust: &Self::RustType) -> usize {
+ 0usize
+ + ::topic_preimage_length(
+ &rust.sender,
+ )
+ + ::topic_preimage_length(
+ &rust.fromInternalBalance,
+ )
+ + ::topic_preimage_length(
+ &rust.recipient,
+ )
+ + ::topic_preimage_length(
+ &rust.toInternalBalance,
+ )
+ }
+
+ #[inline]
+ fn encode_topic_preimage(
+ rust: &Self::RustType,
+ out: &mut alloy_sol_types::private::Vec,
+ ) {
+ out.reserve(::topic_preimage_length(rust));
+ ::encode_topic_preimage(
+ &rust.sender,
+ out,
+ );
+ ::encode_topic_preimage(
+ &rust.fromInternalBalance,
+ out,
+ );
+ ::encode_topic_preimage(
+ &rust.recipient,
+ out,
+ );
+ ::encode_topic_preimage(
+ &rust.toInternalBalance,
+ out,
+ );
+ }
+
+ #[inline]
+ fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken {
+ let mut out = alloy_sol_types::private::Vec::new();
+ ::encode_topic_preimage(rust, &mut out);
+ alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out))
+ }
+ }
+ };
+ use alloy_contract;
+ /**Creates a new wrapper around an on-chain [`IVault`](self) contract instance.
+
+ See the [wrapper's documentation](`IVaultInstance`) for more details.*/
+ #[inline]
+ pub const fn new<
+ P: alloy_contract::private::Provider,
+ N: alloy_contract::private::Network,
+ >(
+ address: alloy_sol_types::private::Address,
+ __provider: P,
+ ) -> IVaultInstance {
+ IVaultInstance::
::new(address, __provider)
+ }
+ /**A [`IVault`](self) instance.
+
+ Contains type-safe methods for interacting with an on-chain instance of the
+ [`IVault`](self) contract located at a given `address`, using a given
+ provider `P`.
+
+ If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
+ documentation on how to provide it), the `deploy` and `deploy_builder` methods can
+ be used to deploy a new instance of the contract.
+
+ See the [module-level documentation](self) for all the available methods.*/
+ #[derive(Clone)]
+ pub struct IVaultInstance
{
+ address: alloy_sol_types::private::Address,
+ provider: P,
+ _network: ::core::marker::PhantomData,
+ }
+ #[automatically_derived]
+ impl ::core::fmt::Debug for IVaultInstance
{
+ #[inline]
+ fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
+ f.debug_tuple("IVaultInstance")
+ .field(&self.address)
+ .finish()
+ }
+ }
+ /// Instantiation and getters/setters.
+ impl, N: alloy_contract::private::Network>
+ IVaultInstance
+ {
+ /**Creates a new wrapper around an on-chain [`IVault`](self) contract instance.
+
+ See the [wrapper's documentation](`IVaultInstance`) for more details.*/
+ #[inline]
+ pub const fn new(address: alloy_sol_types::private::Address, __provider: P) -> Self {
+ Self {
+ address,
+ provider: __provider,
+ _network: ::core::marker::PhantomData,
+ }
+ }
+
+ /// Returns a reference to the address.
+ #[inline]
+ pub const fn address(&self) -> &alloy_sol_types::private::Address {
+ &self.address
+ }
+
+ /// Sets the address.
+ #[inline]
+ pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
+ self.address = address;
+ }
+
+ /// Sets the address and returns `self`.
+ pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
+ self.set_address(address);
+ self
+ }
+
+ /// Returns a reference to the provider.
+ #[inline]
+ pub const fn provider(&self) -> &P {
+ &self.provider
+ }
+ }
+ impl IVaultInstance<&P, N> {
+ /// Clones the provider and returns a new instance with the cloned
+ /// provider.
+ #[inline]
+ pub fn with_cloned_provider(self) -> IVaultInstance {
+ IVaultInstance {
+ address: self.address,
+ provider: ::core::clone::Clone::clone(&self.provider),
+ _network: ::core::marker::PhantomData,
+ }
+ }
+ }
+ /// Function calls.
+ impl, N: alloy_contract::private::Network>
+ IVaultInstance
+ {
+ /// Creates a new call builder using this contract instance's provider
+ /// and address.
+ ///
+ /// Note that the call can be any function call, not just those defined
+ /// in this contract. Prefer using the other methods for
+ /// building type-safe contract calls.
+ pub fn call_builder(
+ &self,
+ call: &C,
+ ) -> alloy_contract::SolCallBuilder<&P, C, N> {
+ alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
+ }
+ }
+ /// Event filters.
+ impl, N: alloy_contract::private::Network>
+ IVaultInstance
+ {
+ /// Creates a new event filter using this contract instance's provider
+ /// and address.
+ ///
+ /// Note that the type can be any event, not just those defined in this
+ /// contract. Prefer using the other methods for building
+ /// type-safe event filters.
+ pub fn event_filter(
+ &self,
+ ) -> alloy_contract::Event<&P, E, N> {
+ alloy_contract::Event::new_sol(&self.provider, &self.address)
+ }
+ }
+}
+/**
+
+Generated by the following Solidity interface...
+```solidity
+library IVault {
+ type SwapKind is uint8;
+ struct BatchSwapStep {
+ bytes32 poolId;
+ uint256 assetInIndex;
+ uint256 assetOutIndex;
+ uint256 amount;
+ bytes userData;
+ }
+ struct FundManagement {
+ address sender;
+ bool fromInternalBalance;
+ address payable recipient;
+ bool toInternalBalance;
+ }
+}
+
+interface BalancerQueries {
+ constructor(address _vault);
+
+ function queryBatchSwap(IVault.SwapKind kind, IVault.BatchSwapStep[] memory swaps, address[] memory assets, IVault.FundManagement memory funds) external returns (int256[] memory assetDeltas);
+ function vault() external view returns (address);
+}
+```
+
+...which was generated by the following JSON ABI:
+```json
+[
+ {
+ "type": "constructor",
+ "inputs": [
+ {
+ "name": "_vault",
+ "type": "address",
+ "internalType": "contract IVault"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "queryBatchSwap",
+ "inputs": [
+ {
+ "name": "kind",
+ "type": "uint8",
+ "internalType": "enum IVault.SwapKind"
+ },
+ {
+ "name": "swaps",
+ "type": "tuple[]",
+ "internalType": "struct IVault.BatchSwapStep[]",
+ "components": [
+ {
+ "name": "poolId",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "assetInIndex",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "assetOutIndex",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "amount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "userData",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "name": "assets",
+ "type": "address[]",
+ "internalType": "contract IAsset[]"
+ },
+ {
+ "name": "funds",
+ "type": "tuple",
+ "internalType": "struct IVault.FundManagement",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "fromInternalBalance",
+ "type": "bool",
+ "internalType": "bool"
+ },
+ {
+ "name": "recipient",
+ "type": "address",
+ "internalType": "address payable"
+ },
+ {
+ "name": "toInternalBalance",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "assetDeltas",
+ "type": "int256[]",
+ "internalType": "int256[]"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "vault",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract IVault"
+ }
+ ],
+ "stateMutability": "view"
+ }
+]
+```*/
+#[allow(
+ non_camel_case_types,
+ non_snake_case,
+ clippy::pub_underscore_fields,
+ clippy::style,
+ clippy::empty_structs_with_brackets
+)]
+pub mod BalancerQueries {
+ use {super::*, alloy_sol_types};
+ /**Constructor`.
+ ```solidity
+ constructor(address _vault);
+ ```*/
+ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
+ #[derive(Clone)]
+ pub struct constructorCall {
+ #[allow(missing_docs)]
+ pub _vault: alloy_sol_types::private::Address,
+ }
+ const _: () = {
+ use alloy_sol_types;
+ {
+ #[doc(hidden)]
+ #[allow(dead_code)]
+ type UnderlyingSolTuple<'a> = (alloy_sol_types::sol_data::Address,);
+ #[doc(hidden)]
+ type UnderlyingRustTuple<'a> = (alloy_sol_types::private::Address,);
+ #[cfg(test)]
+ #[allow(dead_code, unreachable_patterns)]
+ fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq) {
+ match _t {
+ alloy_sol_types::private::AssertTypeEq::<
+ ::RustType,
+ >(_) => {}
+ }
+ }
+ #[automatically_derived]
+ #[doc(hidden)]
+ impl ::core::convert::From for UnderlyingRustTuple<'_> {
+ fn from(value: constructorCall) -> Self {
+ (value._vault,)
+ }
+ }
+ #[automatically_derived]
+ #[doc(hidden)]
+ impl ::core::convert::From> for constructorCall {
+ fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
+ Self { _vault: tuple.0 }
+ }
+ }
+ }
+ #[automatically_derived]
+ impl alloy_sol_types::SolConstructor for constructorCall {
+ type Parameters<'a> = (alloy_sol_types::sol_data::Address,);
+ type Token<'a> = as alloy_sol_types::SolType>::Token<'a>;
+
+ #[inline]
+ fn new<'a>(
+ tuple: as alloy_sol_types::SolType>::RustType,
+ ) -> Self {
+ tuple.into()
+ }
+
+ #[inline]
+ fn tokenize(&self) -> Self::Token<'_> {
+ (
+ ::tokenize(
+ &self._vault,
+ ),
+ )
+ }
+ }
+ };
+ #[derive(Default, Debug, PartialEq, Eq, Hash)]
+ /**Function with signature `queryBatchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool))` and selector `0xf84d066e`.
+ ```solidity
+ function queryBatchSwap(IVault.SwapKind kind, IVault.BatchSwapStep[] memory swaps, address[] memory assets, IVault.FundManagement memory funds) external returns (int256[] memory assetDeltas);
+ ```*/
+ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
+ #[derive(Clone)]
+ pub struct queryBatchSwapCall {
+ #[allow(missing_docs)]
+ pub kind: ::RustType,
+ #[allow(missing_docs)]
+ pub swaps: alloy_sol_types::private::Vec<
+ ::RustType,
+ >,
+ #[allow(missing_docs)]
+ pub assets: alloy_sol_types::private::Vec,
+ #[allow(missing_docs)]
+ pub funds: ::RustType,
+ }
+ #[derive(Default, Debug, PartialEq, Eq, Hash)]
+ ///Container type for the return parameters of the
+ /// [`queryBatchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],
+ /// address[],(address,bool,address,bool))`](queryBatchSwapCall) function.
+ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
+ #[derive(Clone)]
+ pub struct queryBatchSwapReturn {
+ #[allow(missing_docs)]
+ pub assetDeltas:
+ alloy_sol_types::private::Vec,
+ }
+ #[allow(
+ non_camel_case_types,
+ non_snake_case,
+ clippy::pub_underscore_fields,
+ clippy::style
+ )]
+ const _: () = {
+ use alloy_sol_types;
+ {
+ #[doc(hidden)]
+ #[allow(dead_code)]
+ type UnderlyingSolTuple<'a> = (
+ IVault::SwapKind,
+ alloy_sol_types::sol_data::Array,
+ alloy_sol_types::sol_data::Array,
+ IVault::FundManagement,
+ );
+ #[doc(hidden)]
+ type UnderlyingRustTuple<'a> = (
+