Files
tycho-protocol-sdk/evm/out/BalancerV2SwapAdapter.sol/BalancerV2SwapAdapter.json
2025-09-16 11:31:19 +02:00

1 line
66 KiB
JSON

{"abi":[{"type":"constructor","inputs":[{"name":"vault_","type":"address","internalType":"address payable"}],"stateMutability":"nonpayable"},{"type":"function","name":"getCapabilities","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"capabilities","type":"uint8[]","internalType":"enum ISwapAdapterTypes.Capability[]"}],"stateMutability":"pure"},{"type":"function","name":"getLimits","inputs":[{"name":"poolId","type":"bytes32","internalType":"bytes32"},{"name":"sellToken","type":"address","internalType":"address"},{"name":"buyToken","type":"address","internalType":"address"}],"outputs":[{"name":"limits","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getPoolIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"pure"},{"type":"function","name":"getSellAmount","inputs":[{"name":"poolId","type":"bytes32","internalType":"bytes32"},{"name":"sellToken","type":"address","internalType":"address"},{"name":"buyToken","type":"address","internalType":"address"},{"name":"buyAmount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"sellAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"getTokens","inputs":[{"name":"poolId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"tokens","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"price","inputs":[{"name":"poolId","type":"bytes32","internalType":"bytes32"},{"name":"sellToken","type":"address","internalType":"address"},{"name":"buyToken","type":"address","internalType":"address"},{"name":"specifiedAmounts","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"calculatedPrices","type":"tuple[]","internalType":"struct ISwapAdapterTypes.Fraction[]","components":[{"name":"numerator","type":"uint256","internalType":"uint256"},{"name":"denominator","type":"uint256","internalType":"uint256"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"priceSingle","inputs":[{"name":"poolId","type":"bytes32","internalType":"bytes32"},{"name":"sellToken","type":"address","internalType":"address"},{"name":"buyToken","type":"address","internalType":"address"},{"name":"sellAmount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"calculatedPrice","type":"tuple","internalType":"struct ISwapAdapterTypes.Fraction","components":[{"name":"numerator","type":"uint256","internalType":"uint256"},{"name":"denominator","type":"uint256","internalType":"uint256"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"swap","inputs":[{"name":"poolId","type":"bytes32","internalType":"bytes32"},{"name":"sellToken","type":"address","internalType":"address"},{"name":"buyToken","type":"address","internalType":"address"},{"name":"side","type":"uint8","internalType":"enum ISwapAdapterTypes.OrderSide"},{"name":"specifiedAmount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"trade","type":"tuple","internalType":"struct ISwapAdapterTypes.Trade","components":[{"name":"calculatedAmount","type":"uint256","internalType":"uint256"},{"name":"gasUsed","type":"uint256","internalType":"uint256"},{"name":"price","type":"tuple","internalType":"struct ISwapAdapterTypes.Fraction","components":[{"name":"numerator","type":"uint256","internalType":"uint256"},{"name":"denominator","type":"uint256","internalType":"uint256"}]}]}],"stateMutability":"nonpayable"},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"LimitExceeded","inputs":[{"name":"limit","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NotImplemented","inputs":[{"name":"reason","type":"string","internalType":"string"}]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"Unavailable","inputs":[{"name":"reason","type":"string","internalType":"string"}]}],"bytecode":{"object":"0x60a03461009c57601f6116ad38819003918201601f19168301916001600160401b038311848410176100a05780849260209460405283398101031261009c57516001600160a01b0381169081900361009c576080526040516115f890816100b5823960805181818160a10152818161033d01528181610634015281816106a101528181610852015281816109280152818161108e01526112b10152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816323eeca0114610ae55750806348bd7dfd14610a0e5780638307c6551461054f578063a9270fbe146102fb578063aad6e4881461017a578063ba9285fe14610156578063e357d6f9146101285763ecbbc03314610074575f80fd5b3461012457602036600319011261012457604051631f29a8cd60e31b815260048035908201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610119576100f1915f916100f5575b50604051918291602083526020830190610c6b565b0390f35b61011191503d805f833e6101098183610bf3565b810190610d32565b50505f6100dc565b6040513d5f823e3d90fd5b5f80fd5b3461012457604061014461013b36610c2d565b9291909161115c565b60208251918051835201516020820152f35b3461012457602061017261016936610c2d565b92919091610f07565b604051908152f35b3461012457608036600319011261012457600435610196610b39565b9061019f610b4f565b906064359167ffffffffffffffff83116101245736602384011215610124578260040135926101cd84610c15565b936101db6040519586610bf3565b8085526024602086019160051b8301019136831161012457602401905b8282106102eb5750505082519361020e85610c15565b9461021c6040519687610bf3565b80865261022b601f1991610c15565b015f5b8181106102c85750505f5b8451811015610277578061025b61025260019388610cc4565b5185858861115c565b6102658289610cc4565b526102708188610cc4565b5001610239565b856040518091602082016020835281518091526020604084019201905f5b8181106102a3575050500390f35b8251805185526020908101518186015286955060409094019390920191600101610295565b6020906040516102d781610bbb565b5f81525f8382015282828a0101520161022e565b81358152602091820191016101f8565b346101245761030936610b65565b60405192610318606085610bf3565b60028452602084019060403683376040805163f6c0092760e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316929181602481865afa908115610119575f91610507575b505f61039061038a836113a1565b9261140e565b92602460405180968193631f29a8cd60e31b835260048301525afa948515610119575f935f966104e4575b5093956001600160a01b0394851694165f5b84518110156104a057816001600160a01b036103e98388610cc4565b51161461045e575b856001600160a01b036104048388610cc4565b511614610414575b6001016103cd565b61041e8188610cc4565b519060038202918083046003149015171561044a57600a600192046104428b610cb4565b52905061040c565b634e487b7160e01b5f52601160045260245ffd5b808303610475578361046f8a610ca7565b526103f1565b61047f8188610cc4565b5160038102908082046003149015171561044a57600a900461046f8a610ca7565b8789604051918291602083019060208452518091526040830191905f5b8181106104cb575050500390f35b82518452859450602093840193909201916001016104bd565b9095506104fc9193503d805f833e6101098183610bf3565b5092909294886103bb565b90506040813d604011610547575b8161052260409383610bf3565b8101031261012457602061053582610d1e565b91015160ff811603610124578761037c565b3d9150610515565b346101245760a03660031901126101245760043561056b610b39565b90610574610b4f565b60643591600283101561012457604051926060840184811067ffffffffffffffff821117610902576040525f84525f60208501526040516105b481610bbb565b5f81525f602082015260408501526105cb81610cf0565b6109f4575f90608435925f935b6040516323b872dd60e01b6020820152336024820152306044820152606480820183905281526001600160a01b038816919061061f90610619608482610bf3565b836114ba565b604051636eb1769f60e11b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602482015290602082604481865afa918215610119575f926109c0575b50810180911161044a575f8060405192602084019063095ea7b360e01b825260018060a01b037f00000000000000000000000000000000000000000000000000000000000000001660248601526044850152604484526106da606485610bf3565b83519082865af16106e9611525565b81610991575b5080610987575b15610916575b505a936040519160c0830183811067ffffffffffffffff82111761090257604052848352602083019161072e81610cf0565b82526040830190815260018060a01b03841660608401526080830191608435835260209760405161075f8a82610bf3565b5f815260a086019081526040519161077683610b9f565b3083525f8b8401523360408401525f60608401526103e842019182421161044a5761080b610843918d986040519a8b998a996352bbbe2960e01b8b5260e060048c0152825160e48c0152516107ca81610cf0565b6101048b0152516001600160a01b039081166101248b01526060919091015116610144890152516101648801525160c06101848801526101a4870190610cfa565b84516001600160a01b039081166024880152602086015115156044880152604086015116606487015260609094015115156084860152565b60a484015260c483015203815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610119575f916108d5575b5085525a830392831161044a576080956108ac9360208701526084359261115c565b604083015260408051928051845260208101518385015201518051604084015201516060820152f35b90508481813d83116108fb575b6108ec8183610bf3565b8101031261012457518761088a565b503d6108e2565b634e487b7160e01b5f52604160045260245ffd5b60405163095ea7b360e01b60208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660248201525f6044808301919091528152610981919061097b90610975606482610bf3565b846114ba565b826114ba565b876106fc565b50813b15156106f6565b80518015925082156109a6575b5050896106ef565b6109b992506020809183010191016114a2565b898061099e565b9091506020813d6020116109ec575b816109dc60209383610bf3565b8101031261012457519089610679565b3d91506109cf565b600190610a05608435848784610f07565b5f1993906105d8565b3461012457610a1c36610b65565b505050604051610a2d60a082610bf3565b600481526020810160803682376001610a4583610ca7565b526002610a5183610cb4565b52815160021015610ad15760036060830152815160031015610ad15760086080830152604051906020820192602083525180935260408201905f935b808510610a9a5783830384f35b9091825190600a821015610abd5760208160019382935201930194019390610a8d565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b3461012457604036600319011261012457631d04569d60e21b815260206004820181905260248201527f42616c616e636572563253776170416461707465722e676574506f6f6c4964736044820152606490fd5b602435906001600160a01b038216820361012457565b604435906001600160a01b038216820361012457565b606090600319011261012457600435906024356001600160a01b038116810361012457906044356001600160a01b03811681036101245790565b6080810190811067ffffffffffffffff82111761090257604052565b6040810190811067ffffffffffffffff82111761090257604052565b60a0810190811067ffffffffffffffff82111761090257604052565b90601f8019910116810190811067ffffffffffffffff82111761090257604052565b67ffffffffffffffff81116109025760051b60200190565b608090600319011261012457600435906024356001600160a01b038116810361012457906044356001600160a01b0381168103610124579060643590565b90602080835192838152019201905f5b818110610c885750505090565b82516001600160a01b0316845260209384019390920191600101610c7b565b805115610ad15760200190565b805160011015610ad15760400190565b8051821015610ad15760209160051b010190565b60405190610ce582610bbb565b5f6020838281520152565b60021115610abd57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b51906001600160a01b038216820361012457565b909160608284031261012457815167ffffffffffffffff811161012457820183601f8201121561012457805190610d6882610c15565b91610d766040519384610bf3565b80835260208084019160051b8301019186831161012457602001905b828210610e165750505092602083015167ffffffffffffffff81116101245783019080601f83011215610124578151610dca81610c15565b92610dd86040519485610bf3565b81845260208085019260051b82010192831161012457602001905b828210610e065750505060409092015190565b8151815260209182019101610df3565b60208091610e2384610d1e565b815201910190610d92565b60408051909190610e3f8382610bf3565b6001815291601f1901825f5b828110610e5757505050565b602090604051610e6681610bd7565b5f81525f838201525f60408201525f60608201526060608082015282828501015201610e4b565b6020818303126101245780519067ffffffffffffffff821161012457019080601f83011215610124578151610ec181610c15565b92610ecf6040519485610bf3565b81845260208085019260051b82010192831161012457602001905b828210610ef75750505090565b8151815260209182019101610eea565b929091610f12610e2e565b9160405194610f2086610bd7565b85525f6020860152600160408601526060850152602093604051610f448682610bf3565b5f81526080820152610f5583610ca7565b52610f5f82610ca7565b50606060405191610f708284610bf3565b60028352601f19820194853688860137610f8984610ca7565b6001600160a01b039091169052610f9f83610cb4565b6001600160a01b03909116905260405193610fb985610b9f565b3385525f868601523360408601525f82860152604051610fd98382610bf3565b600281528636910137604051637c26833760e11b81529460e48601919091869493926001600487015260e0602487015284518092526101048601928161010060048560051b8a0101019601935f915b8483106110f5575050505050509261108961105184935f96600319868303016044870152610c6b565b82516001600160a01b03908116606486015260208401511515608486015260408401511660a4850152606090920151151560c4840152565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610119576110cf915f916110d3575b50610ca7565b5190565b6110ef91503d805f833e6110e78183610bf3565b810190610e8d565b5f6110c9565b9193959692806111476001939582989b60ff19906003199083030101875260a060808d518051845285810151868501526040810151604085015288810151898501520151918160808201520190610cfa565b99019301930190928997969593949294611028565b9192611166610cd8565b5061116f610e2e565b906040519361117d85610bd7565b84525f60208501526001604085015260608401526020926040516111a18582610bf3565b5f815260808201526111b282610ca7565b526111bc81610ca7565b506040516060946111cd8683610bf3565b60028252601f198601938436878501376111e683610ca7565b6001600160a01b0390911690526111fc82610cb4565b6001600160a01b0390911690526040519261121684610b9f565b3384525f858501523360408501525f868501526040516112368782610bf3565b600281528536910137604051637c26833760e11b81529460e4860190869392915f600486015260e0602486015283518091526101048501918761010060048460051b890101019501925f915b8984841061133e57505050505050926112ac61105184935f96600319868303016044870152610c6b565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610119575f92611322575b506112f382610cb4565b5191600160ff1b831461044a5761130990610ca7565b51906040519261131884610bbb565b5f03835282015290565b6113379192503d805f833e6110e78183610bf3565b905f6112e9565b61138e600193959798829395979a60ff19906003199083030101875260a060808c518051845285810151868501526040810151604085015288810151898501520151918160808201520190610cfa565b9801930193019092899695949293611282565b6040516341343d2b60e11b815290602090829060049082906001600160a01b03165afa5f91816113da575b506113d757505f1990565b90565b9091506020813d602011611406575b816113f660209383610bf3565b810103126101245751905f6113cc565b3d91506113e9565b60405163876f303b60e01b81526001600160a01b039190911690602081600481855afa5f918161146e575b5061146957506020600491604051928380926337a0b34d60e21b82525afa5f91816113da57506113d757505f1990565b905090565b9091506020813d60201161149a575b8161148a60209383610bf3565b810103126101245751905f611439565b3d915061147d565b90816020910312610124575180151581036101245790565b5f806114e29260018060a01b03169360208151910182865af16114db611525565b9083611564565b805190811515918261150a575b50506114f85750565b635274afe760e01b5f5260045260245ffd5b61151d92506020809183010191016114a2565b155f806114ef565b3d1561155f573d9067ffffffffffffffff82116109025760405191611554601f8201601f191660200184610bf3565b82523d5f602084013e565b606090565b90611588575080511561157957805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806115b9575b611599575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561159156fea2646970667358221220e3f14a8e559a59d2985f6223d165fe9c31be449a354e673b7d50555a0236e43d64736f6c634300081b0033","sourceMap":"452:8186:41:-:0;;;;;;;;;;;;;-1:-1:-1;;452:8186:41;;;;-1:-1:-1;;;;;452:8186:41;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;452:8186:41;;;;;;;;613:22;;452:8186;;;;;;;;613:22;452:8186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;452:8186:41;;;;;;-1:-1:-1;452:8186:41;;;;;-1:-1:-1;452:8186:41","linkReferences":{}},"deployedBytecode":{"object":"0x6080806040526004361015610012575f80fd5b5f3560e01c90816323eeca0114610ae55750806348bd7dfd14610a0e5780638307c6551461054f578063a9270fbe146102fb578063aad6e4881461017a578063ba9285fe14610156578063e357d6f9146101285763ecbbc03314610074575f80fd5b3461012457602036600319011261012457604051631f29a8cd60e31b815260048035908201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610119576100f1915f916100f5575b50604051918291602083526020830190610c6b565b0390f35b61011191503d805f833e6101098183610bf3565b810190610d32565b50505f6100dc565b6040513d5f823e3d90fd5b5f80fd5b3461012457604061014461013b36610c2d565b9291909161115c565b60208251918051835201516020820152f35b3461012457602061017261016936610c2d565b92919091610f07565b604051908152f35b3461012457608036600319011261012457600435610196610b39565b9061019f610b4f565b906064359167ffffffffffffffff83116101245736602384011215610124578260040135926101cd84610c15565b936101db6040519586610bf3565b8085526024602086019160051b8301019136831161012457602401905b8282106102eb5750505082519361020e85610c15565b9461021c6040519687610bf3565b80865261022b601f1991610c15565b015f5b8181106102c85750505f5b8451811015610277578061025b61025260019388610cc4565b5185858861115c565b6102658289610cc4565b526102708188610cc4565b5001610239565b856040518091602082016020835281518091526020604084019201905f5b8181106102a3575050500390f35b8251805185526020908101518186015286955060409094019390920191600101610295565b6020906040516102d781610bbb565b5f81525f8382015282828a0101520161022e565b81358152602091820191016101f8565b346101245761030936610b65565b60405192610318606085610bf3565b60028452602084019060403683376040805163f6c0092760e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316929181602481865afa908115610119575f91610507575b505f61039061038a836113a1565b9261140e565b92602460405180968193631f29a8cd60e31b835260048301525afa948515610119575f935f966104e4575b5093956001600160a01b0394851694165f5b84518110156104a057816001600160a01b036103e98388610cc4565b51161461045e575b856001600160a01b036104048388610cc4565b511614610414575b6001016103cd565b61041e8188610cc4565b519060038202918083046003149015171561044a57600a600192046104428b610cb4565b52905061040c565b634e487b7160e01b5f52601160045260245ffd5b808303610475578361046f8a610ca7565b526103f1565b61047f8188610cc4565b5160038102908082046003149015171561044a57600a900461046f8a610ca7565b8789604051918291602083019060208452518091526040830191905f5b8181106104cb575050500390f35b82518452859450602093840193909201916001016104bd565b9095506104fc9193503d805f833e6101098183610bf3565b5092909294886103bb565b90506040813d604011610547575b8161052260409383610bf3565b8101031261012457602061053582610d1e565b91015160ff811603610124578761037c565b3d9150610515565b346101245760a03660031901126101245760043561056b610b39565b90610574610b4f565b60643591600283101561012457604051926060840184811067ffffffffffffffff821117610902576040525f84525f60208501526040516105b481610bbb565b5f81525f602082015260408501526105cb81610cf0565b6109f4575f90608435925f935b6040516323b872dd60e01b6020820152336024820152306044820152606480820183905281526001600160a01b038816919061061f90610619608482610bf3565b836114ba565b604051636eb1769f60e11b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602482015290602082604481865afa918215610119575f926109c0575b50810180911161044a575f8060405192602084019063095ea7b360e01b825260018060a01b037f00000000000000000000000000000000000000000000000000000000000000001660248601526044850152604484526106da606485610bf3565b83519082865af16106e9611525565b81610991575b5080610987575b15610916575b505a936040519160c0830183811067ffffffffffffffff82111761090257604052848352602083019161072e81610cf0565b82526040830190815260018060a01b03841660608401526080830191608435835260209760405161075f8a82610bf3565b5f815260a086019081526040519161077683610b9f565b3083525f8b8401523360408401525f60608401526103e842019182421161044a5761080b610843918d986040519a8b998a996352bbbe2960e01b8b5260e060048c0152825160e48c0152516107ca81610cf0565b6101048b0152516001600160a01b039081166101248b01526060919091015116610144890152516101648801525160c06101848801526101a4870190610cfa565b84516001600160a01b039081166024880152602086015115156044880152604086015116606487015260609094015115156084860152565b60a484015260c483015203815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610119575f916108d5575b5085525a830392831161044a576080956108ac9360208701526084359261115c565b604083015260408051928051845260208101518385015201518051604084015201516060820152f35b90508481813d83116108fb575b6108ec8183610bf3565b8101031261012457518761088a565b503d6108e2565b634e487b7160e01b5f52604160045260245ffd5b60405163095ea7b360e01b60208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660248201525f6044808301919091528152610981919061097b90610975606482610bf3565b846114ba565b826114ba565b876106fc565b50813b15156106f6565b80518015925082156109a6575b5050896106ef565b6109b992506020809183010191016114a2565b898061099e565b9091506020813d6020116109ec575b816109dc60209383610bf3565b8101031261012457519089610679565b3d91506109cf565b600190610a05608435848784610f07565b5f1993906105d8565b3461012457610a1c36610b65565b505050604051610a2d60a082610bf3565b600481526020810160803682376001610a4583610ca7565b526002610a5183610cb4565b52815160021015610ad15760036060830152815160031015610ad15760086080830152604051906020820192602083525180935260408201905f935b808510610a9a5783830384f35b9091825190600a821015610abd5760208160019382935201930194019390610a8d565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b3461012457604036600319011261012457631d04569d60e21b815260206004820181905260248201527f42616c616e636572563253776170416461707465722e676574506f6f6c4964736044820152606490fd5b602435906001600160a01b038216820361012457565b604435906001600160a01b038216820361012457565b606090600319011261012457600435906024356001600160a01b038116810361012457906044356001600160a01b03811681036101245790565b6080810190811067ffffffffffffffff82111761090257604052565b6040810190811067ffffffffffffffff82111761090257604052565b60a0810190811067ffffffffffffffff82111761090257604052565b90601f8019910116810190811067ffffffffffffffff82111761090257604052565b67ffffffffffffffff81116109025760051b60200190565b608090600319011261012457600435906024356001600160a01b038116810361012457906044356001600160a01b0381168103610124579060643590565b90602080835192838152019201905f5b818110610c885750505090565b82516001600160a01b0316845260209384019390920191600101610c7b565b805115610ad15760200190565b805160011015610ad15760400190565b8051821015610ad15760209160051b010190565b60405190610ce582610bbb565b5f6020838281520152565b60021115610abd57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b51906001600160a01b038216820361012457565b909160608284031261012457815167ffffffffffffffff811161012457820183601f8201121561012457805190610d6882610c15565b91610d766040519384610bf3565b80835260208084019160051b8301019186831161012457602001905b828210610e165750505092602083015167ffffffffffffffff81116101245783019080601f83011215610124578151610dca81610c15565b92610dd86040519485610bf3565b81845260208085019260051b82010192831161012457602001905b828210610e065750505060409092015190565b8151815260209182019101610df3565b60208091610e2384610d1e565b815201910190610d92565b60408051909190610e3f8382610bf3565b6001815291601f1901825f5b828110610e5757505050565b602090604051610e6681610bd7565b5f81525f838201525f60408201525f60608201526060608082015282828501015201610e4b565b6020818303126101245780519067ffffffffffffffff821161012457019080601f83011215610124578151610ec181610c15565b92610ecf6040519485610bf3565b81845260208085019260051b82010192831161012457602001905b828210610ef75750505090565b8151815260209182019101610eea565b929091610f12610e2e565b9160405194610f2086610bd7565b85525f6020860152600160408601526060850152602093604051610f448682610bf3565b5f81526080820152610f5583610ca7565b52610f5f82610ca7565b50606060405191610f708284610bf3565b60028352601f19820194853688860137610f8984610ca7565b6001600160a01b039091169052610f9f83610cb4565b6001600160a01b03909116905260405193610fb985610b9f565b3385525f868601523360408601525f82860152604051610fd98382610bf3565b600281528636910137604051637c26833760e11b81529460e48601919091869493926001600487015260e0602487015284518092526101048601928161010060048560051b8a0101019601935f915b8483106110f5575050505050509261108961105184935f96600319868303016044870152610c6b565b82516001600160a01b03908116606486015260208401511515608486015260408401511660a4850152606090920151151560c4840152565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610119576110cf915f916110d3575b50610ca7565b5190565b6110ef91503d805f833e6110e78183610bf3565b810190610e8d565b5f6110c9565b9193959692806111476001939582989b60ff19906003199083030101875260a060808d518051845285810151868501526040810151604085015288810151898501520151918160808201520190610cfa565b99019301930190928997969593949294611028565b9192611166610cd8565b5061116f610e2e565b906040519361117d85610bd7565b84525f60208501526001604085015260608401526020926040516111a18582610bf3565b5f815260808201526111b282610ca7565b526111bc81610ca7565b506040516060946111cd8683610bf3565b60028252601f198601938436878501376111e683610ca7565b6001600160a01b0390911690526111fc82610cb4565b6001600160a01b0390911690526040519261121684610b9f565b3384525f858501523360408501525f868501526040516112368782610bf3565b600281528536910137604051637c26833760e11b81529460e4860190869392915f600486015260e0602486015283518091526101048501918761010060048460051b890101019501925f915b8984841061133e57505050505050926112ac61105184935f96600319868303016044870152610c6b565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610119575f92611322575b506112f382610cb4565b5191600160ff1b831461044a5761130990610ca7565b51906040519261131884610bbb565b5f03835282015290565b6113379192503d805f833e6110e78183610bf3565b905f6112e9565b61138e600193959798829395979a60ff19906003199083030101875260a060808c518051845285810151868501526040810151604085015288810151898501520151918160808201520190610cfa565b9801930193019092899695949293611282565b6040516341343d2b60e11b815290602090829060049082906001600160a01b03165afa5f91816113da575b506113d757505f1990565b90565b9091506020813d602011611406575b816113f660209383610bf3565b810103126101245751905f6113cc565b3d91506113e9565b60405163876f303b60e01b81526001600160a01b039190911690602081600481855afa5f918161146e575b5061146957506020600491604051928380926337a0b34d60e21b82525afa5f91816113da57506113d757505f1990565b905090565b9091506020813d60201161149a575b8161148a60209383610bf3565b810103126101245751905f611439565b3d915061147d565b90816020910312610124575180151581036101245790565b5f806114e29260018060a01b03169360208151910182865af16114db611525565b9083611564565b805190811515918261150a575b50506114f85750565b635274afe760e01b5f5260045260245ffd5b61151d92506020809183010191016114a2565b155f806114ef565b3d1561155f573d9067ffffffffffffffff82116109025760405191611554601f8201601f191660200184610bf3565b82523d5f602084013e565b606090565b90611588575080511561157957805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806115b9575b611599575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561159156fea2646970667358221220e3f14a8e559a59d2985f6223d165fe9c31be449a354e673b7d50555a0236e43d64736f6c634300081b0033","sourceMap":"452:8186:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;8579:50;;452:8186;8579:50;;;452:8186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;452:8186:41;;;;;;-1:-1:-1;;;8294:27:41;;452:8186;;;8294:27;;;452:8186;-1:-1:-1;452:8186:41;8294:27;452:8186;8294:5;-1:-1:-1;;;;;452:8186:41;8294:27;;;;;;452:8186;8294:27;452:8186;8294:27;;;452:8186;;;;;;;;;;;;;;;:::i;:::-;;;;8294:27;;;;;;452:8186;8294:27;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;452:8186;;445:4;452:8186;445:4;;;;;452:8186;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;452:8186:41;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;3955:13;;452:8186;3999:3;452:8186;;3970:27;;;;;4097:19;4056:61;4097:19;452:8186;4097:19;;;:::i;:::-;452:8186;4056:61;;;;:::i;:::-;4018:99;;;;:::i;:::-;;;;;;:::i;:::-;;452:8186;3955:13;;3970:27;;452:8186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;452:8186:41;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;452:8186:41;;-1:-1:-1;452:8186:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;5975:1;452:8186;;;;;;;;;;;;;-1:-1:-1;;;6019:21:41;;452:8186;6019:21;;452:8186;;;6019:5;-1:-1:-1;;;;;452:8186:41;;;;6019:21;452:8186;;6019:21;;;;;;;452:8186;6019:21;;;452:8186;6069:27;452:8186;6134:29;6069:27;;;:::i;:::-;6134:29;;:::i;:::-;452:8186;6019:21;452:8186;;445:4;;;;;;;6242:27;;452:8186;6242:27;;452:8186;6242:27;;;;;;;452:8186;;;6242:27;;;452:8186;-1:-1:-1;6285:13:41;;-1:-1:-1;;;;;452:8186:41;;;;;;6319:3;452:8186;;6300:17;;;;;452:8186;-1:-1:-1;;;;;6342:9:41;;;;:::i;:::-;452:8186;;6342:22;6338:517;;6319:3;452:8186;-1:-1:-1;;;;;6872:9:41;;;;:::i;:::-;452:8186;;6872:21;6868:111;;6319:3;452:8186;;6285:13;;6868:111;6925:11;;;;:::i;:::-;452:8186;405:1;;;;;;;;;;;;;;;;6962:2;452:8186;405:1;;6913:51;;;:::i;:::-;452:8186;6868:111;;;;405:1;452:8186;;;;445:4;;452:8186;445:4;6019:21;452:8186;445:4;6338:517;6388:13;;;;;6695:29;;;;:::i;:::-;452:8186;6338:517;;6384:457;6783:11;;;;:::i;:::-;452:8186;405:1;;;;;;;;;;;;;;;6820:2;405:1;;6771:51;;;:::i;6300:17::-;;;452:8186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;452:8186:41;;;;;;;;;;;;;6242:27;;;;;;;;;;452:8186;6242:27;;;;;;:::i;:::-;;;;;;;;;6019:21;;;452:8186;6019:21;;452:8186;6019:21;;;;;;452:8186;6019:21;;;:::i;:::-;;;452:8186;;;;;;;;:::i;:::-;;;;;;;;;;6019:21;;;;;;-1:-1:-1;6019:21:41;;452:8186;;;;;;-1:-1:-1;;452:8186:41;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;452:8186:41;;-1:-1:-1;452:8186:41;;;;;;;;;;;:::i;:::-;4477:22;;452:8186;;;;4602:9;452:8186;4473:353;;452:8186;;-1:-1:-1;;;452:8186:41;1829:53:32;;;4884:10:41;452:8186;1829:53:32;;452:8186:41;4904:4;452:8186;;;;;;;;;;;1829:53:32;;-1:-1:-1;;;;;452:8186:41;;;;1829:53:32;;;452:8186:41;;1829:53:32;:::i;:::-;;;:::i;:::-;452:8186:41;;-1:-1:-1;;;2200:39:32;;4904:4:41;452:8186;2200:39:32;;452:8186:41;4989:5;-1:-1:-1;;;;;452:8186:41;;;;;;;;;;2200:39:32;;;;;;;;452:8186:41;2200:39:32;;;4473:353:41;2278:20:32;445:4:41;;;;;;;452:8186;;;;3411:47:32;452:8186:41;3411:47:32;;445:4:41;;;;3411:47:32;;452:8186:41;;;;;4989:5;452:8186;;3411:47:32;;452:8186:41;;;;;;3411:47:32;;;452:8186:41;3411:47:32;;:::i;:::-;8024:25;;;;;;;;;:::i;:::-;8066:69;;;4473:353:41;8066:103:32;;;;4473:353:41;3473:45:32;3469:201;;4473:353:41;5039:9;;452:8186;;;;;;;;;;;;;;;;;;;;;;5107:236;;452:8186;;;;:::i;:::-;;;;5107:236;;452:8186;;;;;;;;;;;5107:236;;452:8186;;5107:236;;452:8186;;;;;;;;;;;;;:::i;:::-;;;;;5107:236;;452:8186;;;;;;;;;:::i;:::-;4904:4;452:8186;;;5357:201;;;452:8186;4884:10;452:8186;5357:201;;452:8186;;;5357:201;;452:8186;445:4;5591:15;445:4;5591:15;;;445:4;;;;;452:8186;;;;;445:4;;;;;;;;5083:553;;452:8186;;5083:553;;445:4;;;;;;452:8186;445:4;452:8186;;;:::i;:::-;445:4;;;;;-1:-1:-1;;;;;452:8186:41;;;445:4;;;452:8186;;5107:236;;;;445:4;452:8186;445:4;;;452:8186;445:4;;;;452:8186;445:4;452:8186;445:4;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;452:8186:41;;;;445:4;;452:8186;445:4;;;;452:8186;;445:4;;;;;;;;452:8186;445:4;;;452:8186;445:4;;;;;452:8186;;445:4;;;;;;;;;452:8186;445:4;;;452:8186;5083:553;452:8186;-1:-1:-1;4989:5:41;-1:-1:-1;;;;;452:8186:41;5083:553;;;;;;;452:8186;5083:553;;;4473:353;452:8186;;;5674:9;445:4;;;;;;;452:8186;;5707:57;452:8186;;;;;;;5707:57;;:::i;:::-;452:8186;;;5693:71;452:8186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5083:553;;;;;;;;;;;;;;;;:::i;:::-;;;445:4;;;;;5083:553;;;;;;;;452:8186;;;;;;;;;;;;3469:201:32;452:8186:41;;-1:-1:-1;;;452:8186:41;3561:43:32;;;4989:5:41;-1:-1:-1;;;;;452:8186:41;;3561:43:32;;452:8186:41;-1:-1:-1;452:8186:41;;;;;;;;3561:43:32;;3646:12;;452:8186:41;3561:43:32;;;452:8186:41;;3561:43:32;:::i;:::-;;;:::i;:::-;3646:12;;:::i;:::-;3469:201;;;8066:103;8139:26;;;:30;;8066:103;;:69;452:8186:41;;8078:22:32;;;-1:-1:-1;8078:56:32;;;;8066:69;;;;;;8078:56;8104:30;;;452:8186:41;8104:30:32;;;;;;;;:::i;:::-;8078:56;;;;2200:39;;;;452:8186:41;2200:39:32;;452:8186:41;2200:39:32;;;;;;445:4:41;2200:39:32;;;:::i;:::-;;;445:4:41;;;;;2200:39:32;;;;;;;-1:-1:-1;2200:39:32;;4473:353:41;452:8186;;4717:59;452:8186;;4717:59;;;;:::i;:::-;-1:-1:-1;;4798:17:41;;4473:353;;452:8186;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;7962:20;7944:38;;;:::i;:::-;452:8186;8010:19;7992:37;;;:::i;:::-;452:8186;;;8010:19;452:8186;;;;8057:24;452:8186;;;;;;8057:24;452:8186;;;;8109:21;452:8186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7962:20;452:8186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;452:8186:41;;;;-1:-1:-1;;;8579:50:41;;452:8186;;8579:50;;452:8186;;;;;;;;;;;;8579:50;;;452:8186;;;;-1:-1:-1;;;;;452:8186:41;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;452:8186:41;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;452:8186:41;;;;;;;;;-1:-1:-1;;;;;452:8186:41;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;452:8186:41;;;;;;;;;-1:-1:-1;;;;;452:8186:41;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;452:8186:41;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;452:8186:41;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;7962:20;452:8186;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;452:8186:41;;;;;;;:::o;:::-;;-1:-1:-1;452:8186:41;;;:::o;445:4::-;452:8186;;;;;;;445:4;452:8186;;445:4;;452:8186;;;445:4;-1:-1:-1;445:4:41;;;;;;452:8186;;-1:-1:-1;;452:8186:41;445:4;;;:::o;452:8186::-;;;-1:-1:-1;;;;;452:8186:41;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;445:4;452:8186;:::o;:::-;445:4;;452:8186;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;2838:1;452:8186;;;-1:-1:-1;;452:8186:41;;-1:-1:-1;452:8186:41;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;-1:-1:-1;452:8186:41;;-1:-1:-1;452:8186:41;;;;-1:-1:-1;452:8186:41;;;;-1:-1:-1;452:8186:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;2590:1081;;;;2811:29;;:::i;:::-;452:8186;;;;;;;:::i;:::-;;;-1:-1:-1;2865:176:41;;;452:8186;2838:1;452:8186;2865:176;;452:8186;2865:176;;;452:8186;;;;;;;;;:::i;:::-;-1:-1:-1;452:8186:41;;2865:176;;;452:8186;2850:191;;;:::i;:::-;;;;;:::i;:::-;;452:8186;;;;;;;;:::i;:::-;3091:1;452:8186;;-1:-1:-1;;452:8186:41;;;;;;;;;3103:21;;;:::i;:::-;-1:-1:-1;;;;;452:8186:41;;;;;3134:20;;;:::i;:::-;-1:-1:-1;;;;;452:8186:41;;;;;;;;;;;:::i;:::-;3245:10;452:8186;;-1:-1:-1;3201:187:41;;;452:8186;3245:10;452:8186;3201:187;;452:8186;-1:-1:-1;3201:187:41;;;452:8186;;;;;;;:::i;:::-;3091:1;452:8186;;;;;;;;;-1:-1:-1;;;3522:95:41;;452:8186;;;;;3522:95;;;;;;2838:1;3522:95;;;445:4;452:8186;;;;;;;;;;;;;;;;3522:95;452:8186;;;;;;;;;;-1:-1:-1;452:8186:41;;;;;;;;;;;;;;;;;;-1:-1:-1;452:8186:41;;;;;;;;;;;;:::i;:::-;445:4;;-1:-1:-1;;;;;452:8186:41;;;;;;;445:4;;;;452:8186;;445:4;;;;;;;;452:8186;445:4;;;452:8186;445:4;;;;;452:8186;;445:4;;;;;452:8186;3522:95;452:8186;;3522:5;-1:-1:-1;;;;;452:8186:41;3522:95;;;;;;3649:14;3522:95;-1:-1:-1;3522:95:41;;;452:8186;3649:14;;:::i;:::-;452:8186;2590:1081;:::o;3522:95::-;;;;;;-1:-1:-1;3522:95:41;;;;;;:::i;:::-;;;;;:::i;:::-;;;;452:8186;;;;;;;;2838:1;452:8186;;;;;;;;;;;;;;;;;;2865:176;452:8186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2865:176;452:8186;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1250:1334;;;452:8186;;:::i;:::-;;1483:29;;:::i;:::-;452:8186;;;;;;;:::i;:::-;;;-1:-1:-1;1537:177:41;;;452:8186;1510:1;452:8186;1537:177;;452:8186;1537:177;;;452:8186;;;;;;;;;:::i;:::-;-1:-1:-1;452:8186:41;;1537:177;;;452:8186;1522:192;;;:::i;:::-;;;;;:::i;:::-;-1:-1:-1;452:8186:41;;;;;;;;:::i;:::-;1764:1;452:8186;;-1:-1:-1;;452:8186:41;;;;;;;;;1776:21;;;:::i;:::-;-1:-1:-1;;;;;452:8186:41;;;;;1807:20;;;:::i;:::-;-1:-1:-1;;;;;452:8186:41;;;;;;;;;;;:::i;:::-;1918:10;452:8186;;-1:-1:-1;1874:187:41;;;452:8186;1918:10;452:8186;1874:187;;452:8186;-1:-1:-1;1874:187:41;;;452:8186;;;;;;;:::i;:::-;1764:1;452:8186;;;;;;;;;-1:-1:-1;;;2195:94:41;;452:8186;;;;;2195:94;;;;-1:-1:-1;2195:94:41;;;445:4;452:8186;;;;;;;;;;;;;;;;2195:94;452:8186;;;;;;;;;;-1:-1:-1;452:8186:41;;;;;;;;;;;;;;;;;;;-1:-1:-1;452:8186:41;;;;;;;;;;;;:::i;:::-;2195:94;452:8186;;2195:5;-1:-1:-1;;;;;452:8186:41;2195:94;;;;;;;-1:-1:-1;2195:94:41;;;452:8186;2536:14;;;;:::i;:::-;452:8186;;-1:-1:-1;;;452:8186:41;;;;2561:14;;;:::i;:::-;452:8186;;;;;;;;:::i;:::-;-1:-1:-1;452:8186:41;;;2518:59;;452:8186;1250:1334;:::o;2195:94::-;;;;;;;-1:-1:-1;2195:94:41;;;;;;:::i;:::-;;;;;452:8186;;1510:1;452:8186;;;;;;;;;;;;;;;;;;;;;;1537:177;452:8186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1537:177;452:8186;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;7001:310;452:8186;;-1:-1:-1;;;7169:18:41;;452:8186;7169:18;;452:8186;;7169:18;;452:8186;;-1:-1:-1;;;;;452:8186:41;7169:18;;452:8186;;7169:18;;;7001:310;-1:-1:-1;7165:140:41;;-1:-1:-1;;;4798:17:41;7270:24::o;7165:140::-;7226:12;:::o;7169:18::-;;;;;;;;;;;;;;445:4;7169:18;;;:::i;:::-;;;445:4;;;;;7169:18;;;;;;;-1:-1:-1;7169:18:41;;7317:413;452:8186;;-1:-1:-1;;;7486:22:41;;-1:-1:-1;;;;;452:8186:41;;;;;7486:22;452:8186;7486:22;452:8186;;7486:22;;452:8186;;7486:22;;;7317:413;7482:99;;;452:8186;7486:22;;452:8186;;;445:4;;;;;;;7594:23;;;;452:8186;;7594:23;;;7590:100;;;-1:-1:-1;;;4798:17:41;7317:413::o;7482:99::-;7548:13;;;:::o;7486:22::-;;;;;;;;;;;;;;445:4;7486:22;;;:::i;:::-;;;445:4;;;;;7486:22;;;;;;;-1:-1:-1;7486:22:41;;452:8186;;;;;;;;;;;;;;;;;;:::o;6468:629:32:-;2626:1:33;6468:629:32;3304:55:33;6468:629:32;452:8186:41;;;;;;3256:31:33;;;;;;;;;;;;:::i;:::-;3304:55;;;:::i;:::-;452:8186:41;;6960:22:32;;;;:57;;;;6468:629;6956:135;;;;6468:629;:::o;6956:135::-;7040:40;;;2626:1:33;7040:40:32;;452:8186:41;;2626:1:33;7040:40:32;6960:57;6987:30;;;3256:31:33;6987:30:32;;;;;;;;:::i;:::-;6986:31;6960:57;;;;452:8186:41;;;;;;;;;;;;;;;;;;;-1:-1:-1;;452:8186:41;;;;;:::i;:::-;;;;-1:-1:-1;452:8186:41;;;;:::o;:::-;;;:::o;4421:582:33:-;;4593:8;;-1:-1:-1;452:8186:41;;5674:21:33;:17;;5846:142;;;;;;5670:385;6025:19;;;5694:1;6025:19;;5694:1;6025:19;4589:408;452:8186:41;;4841:22:33;:49;;;4589:408;4837:119;;4969:17;;:::o;4837:119::-;-1:-1:-1;;;4862:1:33;4917:24;;;-1:-1:-1;;;;;452:8186:41;;;;4917:24:33;452:8186:41;;;4917:24:33;4841:49;4867:18;;;:23;4841:49;","linkReferences":{},"immutableReferences":{"53937":[{"start":161,"length":32},{"start":829,"length":32},{"start":1588,"length":32},{"start":1697,"length":32},{"start":2130,"length":32},{"start":2344,"length":32},{"start":4238,"length":32},{"start":4785,"length":32}]}},"methodIdentifiers":{"getCapabilities(bytes32,address,address)":"48bd7dfd","getLimits(bytes32,address,address)":"a9270fbe","getPoolIds(uint256,uint256)":"23eeca01","getSellAmount(bytes32,address,address,uint256)":"ba9285fe","getTokens(bytes32)":"ecbbc033","price(bytes32,address,address,uint256[])":"aad6e488","priceSingle(bytes32,address,address,uint256)":"e357d6f9","swap(bytes32,address,address,uint8,uint256)":"8307c655"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"vault_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"LimitExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"NotImplemented\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"Unavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getCapabilities\",\"outputs\":[{\"internalType\":\"enum ISwapAdapterTypes.Capability[]\",\"name\":\"capabilities\",\"type\":\"uint8[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"buyToken\",\"type\":\"address\"}],\"name\":\"getLimits\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"limits\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getPoolIds\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"}],\"name\":\"getSellAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"}],\"name\":\"getTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"specifiedAmounts\",\"type\":\"uint256[]\"}],\"name\":\"price\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"internalType\":\"struct ISwapAdapterTypes.Fraction[]\",\"name\":\"calculatedPrices\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"}],\"name\":\"priceSingle\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"internalType\":\"struct ISwapAdapterTypes.Fraction\",\"name\":\"calculatedPrice\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"enum ISwapAdapterTypes.OrderSide\",\"name\":\"side\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"specifiedAmount\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"calculatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"internalType\":\"struct ISwapAdapterTypes.Fraction\",\"name\":\"price\",\"type\":\"tuple\"}],\"internalType\":\"struct ISwapAdapterTypes.Trade\",\"name\":\"trade\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"LimitExceeded(uint256)\":[{\"details\":\"The LimitExceeded error is thrown when a limit has been exceeded. E.g. the specified amount can't be traded safely.\"}],\"NotImplemented(string)\":[{\"details\":\"The NotImplemented error is thrown when a function is not implemented.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}],\"Unavailable(string)\":[{\"details\":\"The Unavailable error is thrown when a pool or swap is not available for unexpected reason. E.g. it was paused due to a bug.\"}]},\"kind\":\"dev\",\"methods\":{\"getLimits(bytes32,address,address)\":{\"details\":\"Retrieve the maximum limits of a token that can be traded. The limit is reached when the change in the received amounts is zero or close to zero or when the swap fails because of the pools restrictions. Overestimate if in doubt rather than underestimate. The swap function should not error with `LimitExceeded` if called with amounts below the limit.\",\"params\":{\"buyToken\":\"The token being bought.\",\"poolId\":\"The ID of the trading pool.\",\"sellToken\":\"The token being sold.\"},\"returns\":{\"limits\":\"An array of size two indicating the limit amount for the sell token (maximum the pool is willing to buy in sell token) as well as the limit amount of the buy token (maximum the pool is willing to sell in buy token).\"}},\"getPoolIds(uint256,uint256)\":{\"details\":\"Balancer V2 does not support enumerating pools, they have to be indexed off-chain.\"},\"getTokens(bytes32)\":{\"details\":\"Mainly used for testing as this is redundant with the required substreams implementation.\",\"params\":{\"poolId\":\"The ID of the trading pool.\"},\"returns\":{\"tokens\":\"An array of address contracts.\"}},\"price(bytes32,address,address,uint256[])\":{\"details\":\"The returned prices should include all dex fees. In case the fee is dynamic on the amount traded, the returned price is expected to include the minimum fee. Note that the returned price should be the marginal price which is distinct from the executed price `swap(amount_in) / amount_in`! The marginal price is defined as the price to trade an arbitrarily small (almost zero) amount after the trade of (amount). E.g. the marginal price of a uniswap v2 pool at amount=0 is `reserve0/reserve1`. Ideally this method should be implemented, although it is optional as the price function can be numerically derived from the swap function. In case it is not available, it should be flagged via capabilities and calling it should revert using the `NotImplemented` error. The method needs to be implemented as view as this is usually more efficient and can be run in parallel.\",\"params\":{\"buyToken\":\"The token being bought.\",\"poolId\":\"The ID of the trading pool.\",\"sellToken\":\"The token being sold.\",\"specifiedAmounts\":\"Amounts to calculate marginal prices at.\"},\"returns\":{\"calculatedPrices\":\"array of prices as fractions corresponding to the provided amounts.\"}},\"priceSingle(bytes32,address,address,uint256)\":{\"details\":\"The resulting price is not scaled by the token decimals. Also this function is not 'view' because Balancer V2 simulates the swap and then returns the amount diff in revert data.\",\"params\":{\"buyToken\":\"The token being bought.\",\"poolId\":\"The ID of the trading pool.\",\"sellAmount\":\"The amount of tokens being sold.\",\"sellToken\":\"The token being sold.\"},\"returns\":{\"calculatedPrice\":\"The price of the buy token in terms of the sell as a Fraction struct.\"}},\"swap(bytes32,address,address,uint8,uint256)\":{\"details\":\"This function should be state modifying, meaning it should actually execute the swap and change the state of the EVM accordingly. Please include a gas usage estimate for each amount. This can be achieved e.g. by using the `gasleft()` function. The return type `Trade` has an attribute called price which should contain the value of `price(specifiedAmount)`. As this is optional, defined via `Capability.PriceFunction`, it is valid to return a Fraction(0, 0) value for this price. In that case the price will be estimated numerically.\",\"params\":{\"buyToken\":\"The token being bought.\",\"poolId\":\"The ID of the trading pool.\",\"sellToken\":\"The token being sold.\",\"side\":\"The side of the trade (Sell or Buy).\",\"specifiedAmount\":\"The amount to be traded.\"},\"returns\":{\"trade\":\"Trade struct representing the executed trade.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getLimits(bytes32,address,address)\":{\"notice\":\"Retrieves the limits for each token.\"},\"getTokens(bytes32)\":{\"notice\":\"Retrieves the tokens in the selected pool.\"},\"price(bytes32,address,address,uint256[])\":{\"notice\":\"Calculates marginal prices for specified amounts (optional).\"},\"priceSingle(bytes32,address,address,uint256)\":{\"notice\":\"Calculate the price of the buy token in terms of the sell token.\"},\"swap(bytes32,address,address,uint8,uint256)\":{\"notice\":\"Simulates swapping tokens on a given pool.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/balancer-v2/BalancerV2SwapAdapter.sol\":\"BalancerV2SwapAdapter\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":balancer-v2/interfaces/=lib/balancer-v2-monorepo/pkg/interfaces/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9f21f1bcc51daf7fe3998608d7eeb96b16a9c3816898a0cf6a9407bd105c9253\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://71cd1acb2370851314e9e2fc84123228e468037435eea0ed1c459346a214ce73\",\"dweb:/ipfs/QmXw5XVVnrjX3m224Zs9jdQVY3abwiCEVBjk9w24DXsFSi\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xde02e3a80c5c3b3a2187fbfbdfc7ed7c8c0d5b2e4a0ff5671611674b6c96bd91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://44b4a6161c6b718c37229643c8e6881b82b14dbcf7ea1b0b081fbc7b810e3488\",\"dweb:/ipfs/QmUAxfrzeBusBHRkCfgzvD8axBKvdmtWz9rb52rYBH5K1w\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b\",\"dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x1b0625096e82d06abdcf1844172ef78ef54a5e878761f4d905fda07eaf098424\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cd99f1a4836c07461cb3ea023ae2f6d1d01e80694b764a87623aa7252754756\",\"dweb:/ipfs/QmNPNDuiNU6TJatZcdBcrwixBoo5MSXNDq4kaXhpJLWGpB\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0xc859863e3bda7ec3cddf6dafe2ffe91bcbe648d1395b856b839c32ee9617c44c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9d5417888b873cf2225ed5d50b2a67be97c1504134a2a580512168d587ad82e\",\"dweb:/ipfs/QmNr5fTb2heFW658NZn7dDnofZgFvQTnNxKRJ3wdnR1skX\"]},\"src/balancer-v2/BalancerV2SwapAdapter.sol\":{\"keccak256\":\"0xc8b253abb798769107197c28c7d17b500387dc57f97fd7d24636ee6b0e15fad7\",\"license\":\"AGPL-3.0-or-later\",\"urls\":[\"bzz-raw://442c535784b211fd8da880a1eb75f5597c618b78e391dc1acfd3358d0fa687eb\",\"dweb:/ipfs/QmeC2r9fvL8FPnoHYss8f16PMaEK44C5UGu8PEvUb1HKAe\"]},\"src/interfaces/ISwapAdapter.sol\":{\"keccak256\":\"0xb7af70bac27e53573dfb145ec715203ca28ab8795f512b8ec84c33b5d812d702\",\"license\":\"AGPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad7d3672672ef08abd6c7c04d3426d6f0bed4ebb34c5e4d70926da145cdfbd87\",\"dweb:/ipfs/QmS99C7MRYB9Lkph2f3XLJfjFmX4u2aC6Tm5n886pMSk1C\"]},\"src/interfaces/ISwapAdapterTypes.sol\":{\"keccak256\":\"0xf5637c8fca78253bd88d94d8173d8de4487146f82e462df42f428142ee951778\",\"license\":\"AGPL-3.0-or-later\",\"urls\":[\"bzz-raw://f2c3ab44f87f9c945f52052196537e057292e45d4011830c73a9495e60cdbf4c\",\"dweb:/ipfs/QmePvUFDNHpH2b5Y4kRBXgSrA55RrZgjdUXwV5GLNX5o5h\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.27+commit.40a35a09"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address payable","name":"vault_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"type":"error","name":"LimitExceeded"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"type":"error","name":"NotImplemented"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"type":"error","name":"SafeERC20FailedOperation"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"type":"error","name":"Unavailable"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function","name":"getCapabilities","outputs":[{"internalType":"enum ISwapAdapterTypes.Capability[]","name":"capabilities","type":"uint8[]"}]},{"inputs":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"address","name":"sellToken","type":"address"},{"internalType":"address","name":"buyToken","type":"address"}],"stateMutability":"view","type":"function","name":"getLimits","outputs":[{"internalType":"uint256[]","name":"limits","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function","name":"getPoolIds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}]},{"inputs":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"address","name":"sellToken","type":"address"},{"internalType":"address","name":"buyToken","type":"address"},{"internalType":"uint256","name":"buyAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"getSellAmount","outputs":[{"internalType":"uint256","name":"sellAmount","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"poolId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getTokens","outputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}]},{"inputs":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"address","name":"sellToken","type":"address"},{"internalType":"address","name":"buyToken","type":"address"},{"internalType":"uint256[]","name":"specifiedAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"price","outputs":[{"internalType":"struct ISwapAdapterTypes.Fraction[]","name":"calculatedPrices","type":"tuple[]","components":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"address","name":"sellToken","type":"address"},{"internalType":"address","name":"buyToken","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"priceSingle","outputs":[{"internalType":"struct ISwapAdapterTypes.Fraction","name":"calculatedPrice","type":"tuple","components":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"address","name":"sellToken","type":"address"},{"internalType":"address","name":"buyToken","type":"address"},{"internalType":"enum ISwapAdapterTypes.OrderSide","name":"side","type":"uint8"},{"internalType":"uint256","name":"specifiedAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"swap","outputs":[{"internalType":"struct ISwapAdapterTypes.Trade","name":"trade","type":"tuple","components":[{"internalType":"uint256","name":"calculatedAmount","type":"uint256"},{"internalType":"uint256","name":"gasUsed","type":"uint256"},{"internalType":"struct ISwapAdapterTypes.Fraction","name":"price","type":"tuple","components":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}]}]}]}],"devdoc":{"kind":"dev","methods":{"getLimits(bytes32,address,address)":{"details":"Retrieve the maximum limits of a token that can be traded. The limit is reached when the change in the received amounts is zero or close to zero or when the swap fails because of the pools restrictions. Overestimate if in doubt rather than underestimate. The swap function should not error with `LimitExceeded` if called with amounts below the limit.","params":{"buyToken":"The token being bought.","poolId":"The ID of the trading pool.","sellToken":"The token being sold."},"returns":{"limits":"An array of size two indicating the limit amount for the sell token (maximum the pool is willing to buy in sell token) as well as the limit amount of the buy token (maximum the pool is willing to sell in buy token)."}},"getPoolIds(uint256,uint256)":{"details":"Balancer V2 does not support enumerating pools, they have to be indexed off-chain."},"getTokens(bytes32)":{"details":"Mainly used for testing as this is redundant with the required substreams implementation.","params":{"poolId":"The ID of the trading pool."},"returns":{"tokens":"An array of address contracts."}},"price(bytes32,address,address,uint256[])":{"details":"The returned prices should include all dex fees. In case the fee is dynamic on the amount traded, the returned price is expected to include the minimum fee. Note that the returned price should be the marginal price which is distinct from the executed price `swap(amount_in) / amount_in`! The marginal price is defined as the price to trade an arbitrarily small (almost zero) amount after the trade of (amount). E.g. the marginal price of a uniswap v2 pool at amount=0 is `reserve0/reserve1`. Ideally this method should be implemented, although it is optional as the price function can be numerically derived from the swap function. In case it is not available, it should be flagged via capabilities and calling it should revert using the `NotImplemented` error. The method needs to be implemented as view as this is usually more efficient and can be run in parallel.","params":{"buyToken":"The token being bought.","poolId":"The ID of the trading pool.","sellToken":"The token being sold.","specifiedAmounts":"Amounts to calculate marginal prices at."},"returns":{"calculatedPrices":"array of prices as fractions corresponding to the provided amounts."}},"priceSingle(bytes32,address,address,uint256)":{"details":"The resulting price is not scaled by the token decimals. Also this function is not 'view' because Balancer V2 simulates the swap and then returns the amount diff in revert data.","params":{"buyToken":"The token being bought.","poolId":"The ID of the trading pool.","sellAmount":"The amount of tokens being sold.","sellToken":"The token being sold."},"returns":{"calculatedPrice":"The price of the buy token in terms of the sell as a Fraction struct."}},"swap(bytes32,address,address,uint8,uint256)":{"details":"This function should be state modifying, meaning it should actually execute the swap and change the state of the EVM accordingly. Please include a gas usage estimate for each amount. This can be achieved e.g. by using the `gasleft()` function. The return type `Trade` has an attribute called price which should contain the value of `price(specifiedAmount)`. As this is optional, defined via `Capability.PriceFunction`, it is valid to return a Fraction(0, 0) value for this price. In that case the price will be estimated numerically.","params":{"buyToken":"The token being bought.","poolId":"The ID of the trading pool.","sellToken":"The token being sold.","side":"The side of the trade (Sell or Buy).","specifiedAmount":"The amount to be traded."},"returns":{"trade":"Trade struct representing the executed trade."}}},"version":1},"userdoc":{"kind":"user","methods":{"getLimits(bytes32,address,address)":{"notice":"Retrieves the limits for each token."},"getTokens(bytes32)":{"notice":"Retrieves the tokens in the selected pool."},"price(bytes32,address,address,uint256[])":{"notice":"Calculates marginal prices for specified amounts (optional)."},"priceSingle(bytes32,address,address,uint256)":{"notice":"Calculate the price of the buy token in terms of the sell token."},"swap(bytes32,address,address,uint8,uint256)":{"notice":"Simulates swapping tokens on a given pool."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","balancer-v2/interfaces/=lib/balancer-v2-monorepo/pkg/interfaces/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/balancer-v2/BalancerV2SwapAdapter.sol":"BalancerV2SwapAdapter"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"keccak256":"0x9f21f1bcc51daf7fe3998608d7eeb96b16a9c3816898a0cf6a9407bd105c9253","urls":["bzz-raw://71cd1acb2370851314e9e2fc84123228e468037435eea0ed1c459346a214ce73","dweb:/ipfs/QmXw5XVVnrjX3m224Zs9jdQVY3abwiCEVBjk9w24DXsFSi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724","urls":["bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a","dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0xde02e3a80c5c3b3a2187fbfbdfc7ed7c8c0d5b2e4a0ff5671611674b6c96bd91","urls":["bzz-raw://44b4a6161c6b718c37229643c8e6881b82b14dbcf7ea1b0b081fbc7b810e3488","dweb:/ipfs/QmUAxfrzeBusBHRkCfgzvD8axBKvdmtWz9rb52rYBH5K1w"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84","urls":["bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b","dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x1b0625096e82d06abdcf1844172ef78ef54a5e878761f4d905fda07eaf098424","urls":["bzz-raw://5cd99f1a4836c07461cb3ea023ae2f6d1d01e80694b764a87623aa7252754756","dweb:/ipfs/QmNPNDuiNU6TJatZcdBcrwixBoo5MSXNDq4kaXhpJLWGpB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0xc859863e3bda7ec3cddf6dafe2ffe91bcbe648d1395b856b839c32ee9617c44c","urls":["bzz-raw://a9d5417888b873cf2225ed5d50b2a67be97c1504134a2a580512168d587ad82e","dweb:/ipfs/QmNr5fTb2heFW658NZn7dDnofZgFvQTnNxKRJ3wdnR1skX"],"license":"MIT"},"src/balancer-v2/BalancerV2SwapAdapter.sol":{"keccak256":"0xc8b253abb798769107197c28c7d17b500387dc57f97fd7d24636ee6b0e15fad7","urls":["bzz-raw://442c535784b211fd8da880a1eb75f5597c618b78e391dc1acfd3358d0fa687eb","dweb:/ipfs/QmeC2r9fvL8FPnoHYss8f16PMaEK44C5UGu8PEvUb1HKAe"],"license":"AGPL-3.0-or-later"},"src/interfaces/ISwapAdapter.sol":{"keccak256":"0xb7af70bac27e53573dfb145ec715203ca28ab8795f512b8ec84c33b5d812d702","urls":["bzz-raw://ad7d3672672ef08abd6c7c04d3426d6f0bed4ebb34c5e4d70926da145cdfbd87","dweb:/ipfs/QmS99C7MRYB9Lkph2f3XLJfjFmX4u2aC6Tm5n886pMSk1C"],"license":"AGPL-3.0-or-later"},"src/interfaces/ISwapAdapterTypes.sol":{"keccak256":"0xf5637c8fca78253bd88d94d8173d8de4487146f82e462df42f428142ee951778","urls":["bzz-raw://f2c3ab44f87f9c945f52052196537e057292e45d4011830c73a9495e60cdbf4c","dweb:/ipfs/QmePvUFDNHpH2b5Y4kRBXgSrA55RrZgjdUXwV5GLNX5o5h"],"license":"AGPL-3.0-or-later"}},"version":1},"id":41}