1 line
66 KiB
JSON
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} |